is.na() applied to non-(list or vector) of type 'expression'is.na() applied to non-(list or vector) of type 'expression'

The "ward" method has been renamed to "ward.D"; note new "ward.D2"
Bootstrap (r = 0.5)... Done.
inappropriate distance matrices are omitted in computation: r =  0.5
Bootstrap (r = 0.75)... Done.
inappropriate distance matrices are omitted in computation: r =  0.75
Bootstrap (r = 1.0)... Done.
inappropriate distance matrices are omitted in computation: r =  1
Bootstrap (r = 1.25)... Done.
inappropriate distance matrices are omitted in computation: r =  1.25
'dendrogram' with 2 branches and 4 members total, at height 2.227811 
Joining, by = "y"
Coordinate system already present. Adding new coordinate system, which will replace the existing one.

Joining, by = c("Strain", "Cell", "Expt", "MOI")
Column `Strain` joining factors with different levels, coercing to character vectorJoining, by = "Virus_Cell"

The "ward" method has been renamed to "ward.D"; note new "ward.D2"
Bootstrap (r = 0.44)... Done.
inappropriate distance matrices are omitted in computation: r =  0.444444444444444
Bootstrap (r = 0.56)... Done.
Bootstrap (r = 0.67)... Done.
Bootstrap (r = 0.78)... Done.
Bootstrap (r = 0.89)... Done.
Bootstrap (r = 1.0)... Done.
Bootstrap (r = 1.11)... Done.
Bootstrap (r = 1.22)... Done.
Bootstrap (r = 1.33)... Done.
Joining, by = "y"
Joining, by = "label"
Column `label` joining factors with different levels, coercing to character vectorJoining, by = "label"
Column `label` joining character vector and factor, coercing into character vectorJoining, by = "x"
Coordinate system already present. Adding new coordinate system, which will replace the existing one.

Joining, by = "Virus_Cell"

`geom_smooth()` using method = 'loess' and formula 'y ~ x'
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using WT_DF1_0.07 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/WT_DF1_0.07 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using WT_DF1_0.2 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/WT_DF1_0.2 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using WT_DF1_0.6 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/WT_DF1_0.6 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using WT_DF1_1.8 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/WT_DF1_1.8 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using WT_MDCK_0.07 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/WT_MDCK_0.07 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using WT_MDCK_0.2 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/WT_MDCK_0.2 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using WT_MDCK_0.6 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/WT_MDCK_0.6 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using WT_MDCK_1.8 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/WT_MDCK_1.8 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.

Joining, by = c("Cell", "MOI")
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using DF1_0.02 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/DF1_0.02 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using DF1_0.07 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/DF1_0.07 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using DF1_0.2 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/DF1_0.2 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using DF1_0.6 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/DF1_0.6 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using MDCK_0.02 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/MDCK_0.02 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using MDCK_0.07 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/MDCK_0.07 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using MDCK_0.2 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/MDCK_0.2 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.
Searching for genomes in: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex 
Using MDCK_0.6 in folder: /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/filtered_gene_bc_matrices_mex/MDCK_0.6 
Loaded matrix information
Loaded gene information
Loaded barcode information
Could not find summary csv: 
     /Users/jacobn07/Documents/GFHK99_Multiplicity/Data/CellRanger_Output/outs/metrics_summary.csv.
This file is only necessary if you are performing depth-normalization (calling the equalize_gbms function) in R.
If this pipestance was produced by `cellranger aggr` with the default parameters, depth-normalization in R (via equalize_gbms) is not necessary.

Joining, by = c("Cell", "MOI")
Joining, by = c("Cell", "MOI")

Joining, by = c("Cell", "MOI")

Joining, by = c("Cell", "MOI")
Joining, by = c("Cell", "MOI")

[1] 1873
Joining, by = c("Cell", "MOI")
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: WT ~ P3_NP + (1 | MOI)
   Data: Norm.df1 %>% filter(Cell == "DF1")

REML criterion at convergence: 1803.7

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.4141 -0.7288 -0.2562  0.7354  4.4126 

Random effects:
 Groups   Name        Variance Std.Dev.
 MOI      (Intercept) 0.3912   0.6255  
 Residual             0.2486   0.4986  
Number of obs: 1228, groups:  MOI, 4

Fixed effects:
              Estimate Std. Error         df t value            Pr(>|t|)    
(Intercept)    1.17468    0.31318    3.00373   3.751               0.033 *  
P3_NP          0.60818    0.03441 1223.67135  17.677 <0.0000000000000002 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
      (Intr)
P3_NP -0.026
[1] 4.073803
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: WT ~ P3_NP + (1 | MOI)
   Data: Norm.df1 %>% filter(Cell == "MDCK")

REML criterion at convergence: 593.3

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.2200 -0.7376 -0.1163  0.6324  3.6811 

Random effects:
 Groups   Name        Variance Std.Dev.
 MOI      (Intercept) 0.5677   0.7534  
 Residual             0.1406   0.3750  
Number of obs: 645, groups:  MOI, 4

Fixed effects:
             Estimate Std. Error        df t value             Pr(>|t|)    
(Intercept)   1.00385    0.37713   2.99782   2.662               0.0763 .  
P3_NP         0.38550    0.04631 641.02927   8.324 0.000000000000000513 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
      (Intr)
P3_NP -0.023
[1] 2.454709
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: WT ~ P3_NP * Cell + (1 | MOI)
   Data: Norm.df1

REML criterion at convergence: 2532.2

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.4888 -0.7033 -0.2233  0.6479  4.5748 

Random effects:
 Groups   Name        Variance Std.Dev.
 MOI      (Intercept) 0.4129   0.6426  
 Residual             0.2217   0.4709  
Number of obs: 1873, groups:  MOI, 4

Fixed effects:
                 Estimate Std. Error         df t value            Pr(>|t|)    
(Intercept)       1.17772    0.32169    3.00631   3.661              0.0351 *  
P3_NP             0.58077    0.03193 1866.51899  18.188 <0.0000000000000002 ***
CellMDCK         -0.22722    0.02639 1866.11271  -8.611 <0.0000000000000002 ***
P3_NP:CellMDCK    0.01489    0.05568 1866.07896   0.267              0.7892    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) P3_NP  ClMDCK
P3_NP       -0.024              
CellMDCK    -0.030  0.269       
P3_NP:CMDCK  0.014 -0.474 -0.479
[1] 3.801894
[1] 0.4376587
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: WT ~ Cell + (1 | MOI)
   Data: Norm.df1

REML criterion at convergence: 2912.8

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.1172 -0.6845 -0.1179  0.3882  4.2010 

Random effects:
 Groups   Name        Variance Std.Dev.
 MOI      (Intercept) 0.5762   0.7591  
 Residual             0.2727   0.5222  
Number of obs: 1873, groups:  MOI, 4

Fixed effects:
              Estimate Std. Error         df t value            Pr(>|t|)    
(Intercept)    1.31219    0.37986    3.00366   3.454              0.0407 *  
CellMDCK      -0.24956    0.02565 1868.08101  -9.729 <0.0000000000000002 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
         (Intr)
CellMDCK -0.024
[1] 0.4376587
[1] 0.7782794
Joining, by = c("Cell", "MOI")

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: value ~ variable + (1 | MOI)
   Data: Melt.df2

REML criterion at convergence: 3050.7

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.3174 -0.7854  0.0074  0.7636  2.5500 

Random effects:
 Groups   Name        Variance Std.Dev.
 MOI      (Intercept) 0.2448   0.4948  
 Residual             0.2961   0.5441  
Number of obs: 1865, groups:  MOI, 4

Fixed effects:
              Estimate Std. Error         df t value Pr(>|t|)  
(Intercept)    1.18457    0.24813    3.01658   4.774   0.0172 *
variableVAR    0.04726    0.02522 1860.01080   1.874   0.0611 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
variableVAR -0.053
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Test ~ Cell * Help + (1 | MOI)
   Data: Sum.df

REML criterion at convergence: 6353.6

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.1149 -0.6928 -0.0438  0.5786  3.9675 

Random effects:
 Groups   Name        Variance Std.Dev.
 MOI      (Intercept) 0.6928   0.8323  
 Residual             0.3017   0.5492  
Number of obs: 3845, groups:  MOI, 5

Fixed effects:
                        Estimate Std. Error         df t value             Pr(>|t|)    
(Intercept)              1.09332    0.37266    4.00891   2.934               0.0425 *  
CellMDCK                -0.25449    0.02689 3837.07352  -9.464 < 0.0000000000000002 ***
Helpw/ mVAR2             0.39627    0.02676 3838.28675  14.810 < 0.0000000000000002 ***
CellMDCK:Helpw/ mVAR2    0.15808    0.03673 3837.03828   4.304            0.0000172 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) ClMDCK H/mVAR
CellMDCK    -0.026              
Helpw/mVAR2 -0.032  0.378       
CMDCK:H/mVA  0.018 -0.729 -0.632
[1] 0.4376587
[1] 0.2056718
[1] 1.490405
[1] 2.583851
[1] 2.818383
[1] 3.630781
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Test ~ Cell * Help + (1 | MOI)
   Data: Sum.df %>% filter(MOI < 0.6)

REML criterion at convergence: 4069.7

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.5909 -0.7503 -0.1978  0.6255  3.4201 

Random effects:
 Groups   Name        Variance Std.Dev.
 MOI      (Intercept) 0.1748   0.4180  
 Residual             0.3773   0.6142  
Number of obs: 2169, groups:  MOI, 3

Fixed effects:
                        Estimate Std. Error         df t value             Pr(>|t|)    
(Intercept)              0.64536    0.24313    2.03858   2.654                0.115    
CellMDCK                -0.41472    0.04397 2163.01633  -9.432 < 0.0000000000000002 ***
Helpw/ mVAR2             0.17251    0.03642 2163.88745   4.737           0.00000231 ***
CellMDCK:Helpw/ mVAR2    0.54853    0.05587 2163.14850   9.818 < 0.0000000000000002 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) ClMDCK H/mVAR
CellMDCK    -0.061              
Helpw/mVAR2 -0.085  0.408       
CMDCK:H/mVA  0.044 -0.788 -0.617

         Rep     WT.Cells Helper.Cells 
          10          102          253 


Call:
lm(formula = Pp ~ Rep, data = Exp.Pp.1 %>% mutate(Rep = Rep %>% 
    factor(levels = c(1, 2, 3, 4, 5))))

Residuals:
     Min       1Q   Median       3Q      Max 
-0.25875 -0.11031  0.01063  0.08812  0.22500 

Coefficients:
            Estimate Std. Error t value             Pr(>|t|)    
(Intercept)  0.71500    0.04533  15.775 < 0.0000000000000002 ***
Rep2        -0.05625    0.06410  -0.878              0.38618    
Rep3        -0.05875    0.06410  -0.917              0.36565    
Rep4        -0.12250    0.06410  -1.911              0.06421 .  
Rep5        -0.24000    0.06410  -3.744              0.00065 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1282 on 35 degrees of freedom
Multiple R-squared:  0.3186,    Adjusted R-squared:  0.2407 
F-statistic: 4.091 on 4 and 35 DF,  p-value: 0.007987


Call:
lm(formula = Pp ~ Rep, data = Exp.Pp.1 %>% mutate(Rep = Rep %>% 
    factor(levels = c(1, 2, 3, 4))))

Residuals:
     Min       1Q   Median       3Q      Max 
-0.25875 -0.10875  0.01063  0.06906  0.20375 

Coefficients:
            Estimate Std. Error t value             Pr(>|t|)    
(Intercept)  0.71500    0.04253  16.811 0.000000000000000366 ***
Rep2        -0.05625    0.06015  -0.935               0.3577    
Rep3        -0.05875    0.06015  -0.977               0.3371    
Rep4        -0.12250    0.06015  -2.037               0.0513 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1203 on 28 degrees of freedom
Multiple R-squared:  0.1293,    Adjusted R-squared:  0.03598 
F-statistic: 1.386 on 3 and 28 DF,  p-value: 0.2676
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

is.na() applied to non-(list or vector) of type 'expression'Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3IgSG91c2VrZWVwaW5nfQpyZXF1aXJlKHJlc2hhcGUyKQpyZXF1aXJlKGdncGxvdDIpCnJlcXVpcmUoc2NhbGVzKQpyZXF1aXJlKGdndGhlbWVzKQpyZXF1aXJlKGdncmlkZ2VzKQpyZXF1aXJlKGxhdGV4MmV4cCkKcmVxdWlyZShsbWU0KQpyZXF1aXJlKGxtZXJUZXN0KQpyZXF1aXJlKHJlbGFpbXBvKQpyZXF1aXJlKHRpZHl2ZXJzZSkKcmVxdWlyZShwdmNsdXN0KQpyZXF1aXJlKGRlbmRleHRlbmQpCgoKI0lmIHRoZSBwYWNrYWdlICJjZWxscmFuZ2VyUmtpdCIgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCwgdXNlIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gaW5zdGFsbCBpdCBmcm9tIEdpdEh1YgoKIyBpbnN0YWxsLnBhY2thZ2VzKCJkZXZ0b29scyIpCiMgaW5zdGFsbC5wYWNrYWdlcygicm94eWdlbjIiKQojIGxpYnJhcnkoZGV2dG9vbHMpCiMgbGlicmFyeShyb3h5Z2VuMikKIyBkZXZ0b29sczo6aW5zdGFsbF9naXRodWIoImhiLWdpdGlmaWVkL2NlbGxyYW5nZXJSa2l0IiwgYnVpbGRfdmlnbmV0dGVzID0gRkFMU0UpCgpyZXF1aXJlKGNlbGxyYW5nZXJSa2l0KQoKIyBCZWZvcmUgcnVubmluZywgY2hhbmdlIHRoZSBQcm9qLkhvbWUgdmFyaWFibGUgYmVsb3cgdG8gdGhlIGZpbGUgcGF0aCBvZiB0aGUgcGFyZW50IGZvbGRlciBjb250YWluaW5nIE5vdGVib29rLlJtZC4KUHJvai5Ib21lID0gIi9Vc2Vycy9qYWNvYm4wNy9Eb2N1bWVudHMvR0ZISzk5X011bHRpcGxpY2l0eSIKCnNldHdkKFByb2ouSG9tZSkKCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBmaWcubWFyZ2luID0gVFJVRSkKdGhlbWVfc2V0KHRoZW1lX2dyZXkoKSkKCmdfbGVnZW5kPC1mdW5jdGlvbihhLmdwbG90KXsKICB0bXAgPC0gZ2dwbG90X2d0YWJsZShnZ3Bsb3RfYnVpbGQoYS5ncGxvdCkpCiAgbGVnIDwtIHdoaWNoKHNhcHBseSh0bXAkZ3JvYnMsIGZ1bmN0aW9uKHgpIHgkbmFtZSkgPT0gImd1aWRlLWJveCIpCiAgbGVnZW5kIDwtIHRtcCRncm9ic1tbbGVnXV0KICBsZWdlbmQKfQoKYGBgCgoKYGBge3IgRmlndXJlIDF9CgpHZW5vdHlwZV9Db252ZXJ0ID0gZnVuY3Rpb24oVmlyaW9ucykgewogIAogIFBCMi5JbmRleCA9IHdoaWNoKGNvbG5hbWVzKFZpcmlvbnMpID09ICJQQjIiKQogIE5TLkluZGV4ID0gd2hpY2goY29sbmFtZXMoVmlyaW9ucykgPT0gIk5TIikKICBWaXJpb24uVGFibGUgPSBWaXJpb25zWyxQQjIuSW5kZXg6TlMuSW5kZXhdCiAgCiAgR2Vub3R5cGUgPSByZXAoeCA9IDAsIHRpbWVzID0gbnJvdyhWaXJpb24uVGFibGUpKQogIAogIGZvciAoaSBpbiAwOjcpIHsKICAgIEdlbm90eXBlID0gR2Vub3R5cGUgKyAoMl5pKSAqIFZpcmlvbi5UYWJsZVssaSsxXQogIH0KICBHZW5vdHlwZQp9CgpTaW1wc29uX0RpdmVyc2l0eSA9IGZ1bmN0aW9uKEdlbm90eXBlcykgewogIFAgPSBhcy5udW1lcmljKHRhYmxlKEdlbm90eXBlcykpCiAgTiA9IHN1bShQKQogIFAgPSBQIC8gc3VtKFApCiAgCiAgMSAvIHN1bShQICogUCkgIzJuZCBPcmRlciBIaWxsIE51bWJlciAoTjIpCiAgCn0KClBvaXNfRXhwID0gZnVuY3Rpb24oSEEpIHsKICAKICBsYW0gPSAtbG9nKDEgLSBIQSkKICAKICBEdWFsID0gcmVwKDAsbGVuZ3RoKEhBKSkKICAKICBmb3IgKGkgaW4gMTpsZW5ndGgoSEEpKSB7CiAgICBEdWFsW2ldID0gc3VtKGRwb2lzKHggPSAxOjIwLCBsYW1iZGEgPSBsYW1baV0pICogKDEgLSAyIF4gKDEgLSAxOjIwKSkpCiAgfQogIAogIER1YWwKfQoKCgpzZXQuc2VlZCg2NjYpCgpGbHUuU2VnbWVudHMgPSBjKCJQQjIiLCJQQjEiLCJQQSIsIkhBIiwiTlAiLCJOQSIsIk0iLCJOUyIpClBQMV9SZWFzc29ydG1lbnQgPSByZWFkLmNzdihmaWxlID0gZmlsZS5wYXRoKFByb2ouSG9tZSwiRGF0YSIsIlBQMV9SZWFzc29ydG1lbnQuY3N2IiksIGhlYWRlciA9IFRSVUUpCkV4cF9EdWFsX0hBID0gcmVhZC5jc3YoZmlsZSA9IGZpbGUucGF0aChQcm9qLkhvbWUsIkRhdGEiLCJQb2lzc29uX0R1YWxIQV9EYXRhLmNzdiIpLCBoZWFkZXIgPSBUUlVFKQoKIyAxQTogZHVhbC1IQSsgdnMuIEhBKyAtLS0tCgpLUDkgPSByZWFkLmNzdihmaWxlID0gZmlsZS5wYXRoKFByb2ouSG9tZSwiRGF0YSIsIjFBX0RhdGEuY3N2IiksIGhlYWRlciA9IFRSVUUpICU+JQogZHBseXI6Om11dGF0ZShFeHByZXNzaW5nX0hBID0gRXhwcmVzc2luZ19IQSAvIDEwMCwKICAgICAgICAgU3RyYWluID0gU3RyYWluICU+JSBmYWN0b3IobGV2ZWxzID0gYygiR0ZISzk5IGluIE1EQ0siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHRkhLOTkgaW4gREYtMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5MMDkgaW4gTURDSyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hTU45OSBpbiBNRENLIikpLAogICAgICAgICBEdWFsX0hBID0gRHVhbF9IQSAvIDEwMCkKZ2dwbG90KCkgKwogIGdlb21fYWJsaW5lKHNsb3BlID0gMSwKICAgICAgICAgICAgICBjb2xvciA9ICJkaW1ncmF5IiwKICAgICAgICAgICAgICBsdHkgPSAzLAogICAgICAgICAgICAgIGx3ZCA9IDEpICsKICBnZW9tX2xpbmUoZGF0YSA9IEV4cF9EdWFsX0hBLCAKICAgICAgICAgICAgYWVzKHggPSBwSEEgKiAxMDAsIAogICAgICAgICAgICAgICAgeSA9IHBEdWFsICogMTAwKSwgCiAgICAgICAgICAgIGNvbG9yID0gImRpbWdyYXkiLAogICAgICAgICAgICBsdHkgPSAyLCAKICAgICAgICAgICAgbHdkID0gMSkgKwogIGFubm90YXRlKCJ0ZXh0Iix4ID0gODAsIHkgPSA5NSxzaXplID0gNixsYWJlbCA9IFRlWCgiXFx0ZXh0YmZ7eCA9IHl9IiksIGNvbG9yID0gImRpbWdyYXkiKSArCiAgYW5ub3RhdGUoInRleHQiLHggPSA4MCwgeSA9IDUsc2l6ZSA9IDYsbGFiZWwgPSBUZVgoIlxcdGV4dGJme1ByZWRpY3Rpb259IiksIGNvbG9yID0gImRpbWdyYXkiKSArCiAgZ2VvbV9wb2ludChkYXRhID0gS1A5LAogICAgICAgICAgICAgYWVzKHggPSBFeHByZXNzaW5nX0hBICogMTAwLAogICAgICAgICAgICAgICAgIHkgPSBEdWFsX0hBICogMTAwLAogICAgICAgICAgICAgICAgIGNvbG9yID0gU3RyYWluKSkgKwogIGdlb21fc21vb3RoKGRhdGEgPSBLUDksCiAgICAgICAgICAgICAgYWVzKHggPSBFeHByZXNzaW5nX0hBICogMTAwLAogICAgICAgICAgICAgICAgICB5ID0gRHVhbF9IQSAqIDEwMCwKICAgICAgICAgICAgICAgICAgY29sb3IgPSBTdHJhaW4sCiAgICAgICAgICAgICAgICAgIGZpbGwgPSBTdHJhaW4pLAogICAgICAgICAgICAgIG1ldGhvZCA9ICJybG0iLAogICAgICAgICAgICAgIHNlID0gRkFMU0UsCiAgICAgICAgICAgICAgZm9ybXVsYSA9IHkgfiAwICsgSShQb2lzX0V4cCh4IC8gMTAwKSkgKyB4KSArCiAgbGFicyh4ID0gIGV4cHJlc3Npb24oYm9sZCgiJSBjZWxscyBIQSJeIisiKSksCiAgICAgICB5ID0gIGV4cHJlc3Npb24oYm9sZCgiJSBjZWxscyBkdWFsLUhBIl4iKyIpKSwKICAgICAgIGNvbG9yID0gIlZpcnVzOmNlbGwiLAogICAgICAgZmlsbCA9ICJWaXJ1czpjZWxsIikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJHRkhLOTkgaW4gTURDSyIgPSAic2t5Ymx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hTU45OSBpbiBNRENLIiA9ICJncmVlbjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOTDA5IGluIE1EQ0siID0gImdvbGRlbnJvZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdGSEs5OSBpbiBERi0xIiA9ICJkZWVwcGluazMiKSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDAsMjUsNTAsNzUsMTAwKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBjKDAsMjUsNTAsNzUsMTAwKSkgKwogIGNvb3JkX2NhcnRlc2lhbih4bGltID0gYygwLDEwMCksIHlsaW0gPSBjKDAsMTAwKSkgKwogIHRoZW1lKHRleHQ9ZWxlbWVudF90ZXh0KHNpemU9MTQsZmFjZT0iYm9sZCIpLAogICAgICAgIHN0cmlwLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSxtYXJnaW49bWFyZ2luKDAsMCwzLDApKSwKICAgICAgICBzdHJpcC50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksbWFyZ2luPW1hcmdpbigwLDAsMCwwKSxhbmdsZT0wKSwKICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSksCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTAsdmp1c3Q9MCxzaXplPXJlbCgxLjUpLGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLmxpbmUueCA9IGVsZW1lbnRfbGluZShzaXplPTAuNSksCiAgICAgICAgYXhpcy5saW5lLnkgPSBlbGVtZW50X2xpbmUoc2l6ZT0wLjUpLAogICAgICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfbGluZShzaXplPTAuNSwgY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLnRpY2tzLnkgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS4yKSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjIpKSwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiTkEiKQoKZ2dzYXZlKCdQbG90cy8xQV9IQV9Db19FeHByZXNzaW9uLnBkZicsCiAgICAgICB3aWR0aCA9IDQsCiAgICAgICBoZWlnaHQgPSA0LAogICAgICAgdW5pdCA9ICJpbiIpCgpMZWdlbmQuMUEgPSBnZ3Bsb3QoKSArCiAgZ2VvbV9hYmxpbmUoc2xvcGUgPSAxLAogICAgICAgICAgICAgIGNvbG9yID0gImRpbWdyYXkiLAogICAgICAgICAgICAgIGx0eSA9IDMsCiAgICAgICAgICAgICAgbHdkID0gMSkgKwogIGdlb21fbGluZShkYXRhID0gRXhwX0R1YWxfSEEsIAogICAgICAgICAgICBhZXMoeCA9IHBIQSAqIDEwMCwgCiAgICAgICAgICAgICAgICB5ID0gcER1YWwgKiAxMDApLCAKICAgICAgICAgICAgY29sb3IgPSAiZGltZ3JheSIsCiAgICAgICAgICAgIGx0eSA9IDIsIAogICAgICAgICAgICBsd2QgPSAxKSArCiAgYW5ub3RhdGUoInRleHQiLHggPSA4MCwgeSA9IDk1LHNpemUgPSA2LGxhYmVsID0gVGVYKCJcXHRleHRiZnt4ID0geX0iKSwgY29sb3IgPSAiZGltZ3JheSIpICsKICBhbm5vdGF0ZSgidGV4dCIseCA9IDgwLCB5ID0gNSxzaXplID0gNixsYWJlbCA9IFRlWCgiXFx0ZXh0YmZ7UHJlZGljdGlvbn0iKSwgY29sb3IgPSAiZGltZ3JheSIpICsKICBnZW9tX3BvaW50KGRhdGEgPSBLUDksCiAgICAgICAgICAgICBhZXMoeCA9IEV4cHJlc3NpbmdfSEEgKiAxMDAsCiAgICAgICAgICAgICAgICAgeSA9IER1YWxfSEEgKiAxMDAsCiAgICAgICAgICAgICAgICAgY29sb3IgPSBTdHJhaW4pKSArCiAgZ2VvbV9zbW9vdGgoZGF0YSA9IEtQOSwKICAgICAgICAgICAgICBhZXMoeCA9IEV4cHJlc3NpbmdfSEEgKiAxMDAsCiAgICAgICAgICAgICAgICAgIHkgPSBEdWFsX0hBICogMTAwLAogICAgICAgICAgICAgICAgICBjb2xvciA9IFN0cmFpbiwKICAgICAgICAgICAgICAgICAgZmlsbCA9IFN0cmFpbiksCiAgICAgICAgICAgICAgbWV0aG9kID0gInJsbSIsCiAgICAgICAgICAgICAgc2UgPSBGQUxTRSwKICAgICAgICAgICAgICBmb3JtdWxhID0geSB+IDAgKyBJKFBvaXNfRXhwKHggLyAxMDApKSArIHgpICsKICBsYWJzKHggPSAgZXhwcmVzc2lvbihib2xkKCIlIGNlbGxzIEhBIl4iKyIpKSwKICAgICAgIHkgPSAgZXhwcmVzc2lvbihib2xkKCIlIGNlbGxzIGR1YWwtSEEiXiIrIikpLAogICAgICAgY29sb3IgPSAiVmlydXM6Y2VsbCIsCiAgICAgICBmaWxsID0gIlZpcnVzOmNlbGwiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIkdGSEs5OSBpbiBNRENLIiA9ICJza3libHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFNTjk5IGluIE1EQ0siID0gImdyZWVuMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5MMDkgaW4gTURDSyIgPSAiZ29sZGVucm9kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR0ZISzk5IGluIERGLTEiID0gImRlZXBwaW5rMyIpKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoMCwyNSw1MCw3NSwxMDApKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IGMoMCwyNSw1MCw3NSwxMDApKSArCiAgY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKDAsMTAwKSwgeWxpbSA9IGMoMCwxMDApKSArCiAgdGhlbWUodGV4dD1lbGVtZW50X3RleHQoc2l6ZT0xNCxmYWNlPSJib2xkIiksCiAgICAgICAgc3RyaXAudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLG1hcmdpbj1tYXJnaW4oMCwwLDMsMCkpLAogICAgICAgIHN0cmlwLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSxtYXJnaW49bWFyZ2luKDAsMCwwLDApLGFuZ2xlPTApLAogICAgICAgIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpKSwKICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9MCx2anVzdD0wLHNpemU9cmVsKDEuNSksY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMubGluZS54ID0gZWxlbWVudF9saW5lKHNpemU9MC41KSwKICAgICAgICBheGlzLmxpbmUueSA9IGVsZW1lbnRfbGluZShzaXplPTAuNSksCiAgICAgICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9saW5lKHNpemU9MC41LCBjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjIpLGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuMikpLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpKQoKZ2dzYXZlKGdfbGVnZW5kKExlZ2VuZC4xQSksCiAgICAgICBmaWxlID0gIlBsb3RzL0xlZ2VuZF8xQS5wZGYiLAogICAgICAgaGVpZ2h0ID0gNSwKICAgICAgIHdpZHRoID0gNSwKICAgICAgIHVuaXRzID0gImluIikKCiMgMUI6IExpbmVhcml0eSBvZiAlIGR1YWwtSEErIHZzLiAlIEhBKyAtLS0tCgptMSA9IGxtKGZvcm11bGEgPSBEdWFsX0hBIH4gMCArIFN0cmFpbjpIQV8yICsgU3RyYWluOkhBLAogICAgICAgIGRhdGEgPSBLUDkgJT4lZHBseXI6Om11dGF0ZShIQSA9IEV4cHJlc3NpbmdfSEEsIEhBXzIgPSBQb2lzX0V4cChIQSkpKSAlPiUgc3VtbWFyeQpzMSA9IGNvZWZmaWNpZW50cyhtMSkKCmRmMSA9IG1hdHJpeChucm93ID0gS1A5JFN0cmFpbiAlPiUgdW5pcXVlICU+JSBsZW5ndGgsCiAgICAgICAgICAgICBuY29sID0gMywKICAgICAgICAgICAgIGRhdGEgPSAwKQoKZGYxWywxXSA9IChuYW1lcyhzMVssMV0pICU+JSBzdHJfcmVwbGFjZSgiU3RyYWluIiwiIikgJT4lIHN0cl9yZXBsYWNlKCI6SEEiLCIiKSAlPiUgc3RyX3JlcGxhY2UoIl8yIiwiIikpWzE6bnJvdyhkZjEpXQpkZjFbLDJdID0gYXMubnVtZXJpYyhzMVsxOihucm93KGRmMSkpLDFdKQpkZjFbLDNdID0gYXMubnVtZXJpYyhzMVsobnJvdyhkZjEpICsgMSk6KG5yb3coczEpKSwxXSkKZGYxID0gZGYxICU+JSBkYXRhLmZyYW1lCgpjb2xuYW1lcyhkZjEpID0gYygiU3RyYWluIiwiUG9pcyIsIkxpbmVhciIpCgpkZjIgPSBkZjEgJT4lCiBkcGx5cjo6bXV0YXRlKFBvaXMgPSBQb2lzICU+JSBhcy5jaGFyYWN0ZXIgJT4lIGFzLm51bWVyaWMsCiAgICAgICAgIExpbmVhciA9IExpbmVhciAlPiUgYXMuY2hhcmFjdGVyICU+JSBhcy5udW1lcmljLAogICAgICAgICBQb2lzX1JlbCA9IGFicyhQb2lzKSAvIChhYnMoUG9pcykgKyBhYnMoTGluZWFyKSksCiAgICAgICAgIExpbl9SZWwgPSBhYnMoTGluZWFyKSAvIChhYnMoUG9pcykgKyBhYnMoTGluZWFyKSksCiAgICAgICAgIFBlcmNfV0YxMF9MaW4gPSAoTGluZWFyIC0gbWluKExpbmVhcikpIC8gbWF4KExpbmVhciAtIG1pbihMaW5lYXIpKSwKICAgICAgICAgUGVyY19NTjk5X1F1YWQgPSAoUG9pcyAtIG1pbihQb2lzKSkgLyBtYXgoUG9pcyAtIG1pbihQb2lzKSksCiAgICAgICAgIFN0cmFpbiA9IGZhY3RvcihTdHJhaW4sIGxldmVscyA9IGMoIkdGSEs5OSBpbiBNRENLIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR0ZISzk5IGluIERGLTEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOTDA5IGluIE1EQ0siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYU1OOTkgaW4gTURDSyIpICU+JSByZXYpKQoKZ2dwbG90KCkgKwogIGdlb21fYmFyKGRhdGEgPSBkZjIsCiAgICAgICAgICAgYWVzKHggPSBTdHJhaW4sCiAgICAgICAgICAgICAgIHkgPSBMaW5fUmVsICogMTAwLAogICAgICAgICAgICAgICBmaWxsID0gU3RyYWluKSwKICAgICAgICAgICBjb2xvciA9ICJibGFjayIsCiAgICAgICAgICAgc3RhdCA9ICJpZGVudGl0eSIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJHRkhLOTkgaW4gTURDSyIgPSAic2t5Ymx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFNTjk5IGluIE1EQ0siID0gImdyZWVuMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR0ZISzk5IGluIERGLTEiID0gImRlZXBwaW5rMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTkwwOSBpbiBNRENLIiA9ICJnb2xkZW5yb2QiKSwKICAgICAgICAgICAgICAgICAgICBndWlkZSA9IEZBTFNFKSArCiAgbGFicyh5ID0gIiUgbGluZWFyaXR5IiwKICAgICAgIHggPSBOVUxMKSArCiAgY29vcmRfZmxpcCgpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLDEwMCkpICsKICB0aGVtZSh0ZXh0PWVsZW1lbnRfdGV4dChzaXplPTE0LGZhY2U9ImJvbGQiKSwKICAgICAgICBzdHJpcC50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksbWFyZ2luPW1hcmdpbigwLDAsMywwKSksCiAgICAgICAgc3RyaXAudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLG1hcmdpbj1tYXJnaW4oMCwwLDAsMCksYW5nbGU9MCksCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSkpLAogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZSA9IDAgLHZqdXN0PTAuNSxzaXplPXJlbCgxLjUpLGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLmxpbmUueCA9IGVsZW1lbnRfbGluZShzaXplPTAuNSksCiAgICAgICAgYXhpcy5saW5lLnkgPSBlbGVtZW50X2xpbmUoc2l6ZT0wLjUpLAogICAgICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfbGluZShzaXplPTAuNSwgY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLnRpY2tzLnkgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS4yKSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjIpKSwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiTkEiKQoKZ2dzYXZlKCdQbG90cy8xQl9QZXJjZW50X0xpbmVhci5wZGYnLAogICAgICAgd2lkdGggPSA1LAogICAgICAgaGVpZ2h0ID0gNCwKICAgICAgIHVuaXQgPSAiaW4iKQoKIyAxQzogcmVhc3NvcnRtZW50IHZzLiBIQSssIGJ5IFZpcnVzIC0tLS0KCktQNCA9IHJlYWQuY3N2KGZpbGUgPSBmaWxlLnBhdGgoUHJvai5Ib21lLCJEYXRhIiwiMUNfRGF0YS5jc3YiKSwgaGVhZGVyID0gVFJVRSkgJT4lCiAgZHBseXI6Om11dGF0ZShDZWxsID0gQ2VsbCAlPiUgc3RyX3JlcGxhY2UoIkRGMSIsIkRGLTEiKSwKICAgICAgICAgVmlydXNfQ2VsbCA9IHN0cl9jKFZpcnVzLCIgaW4gIiwgQ2VsbCksCiAgICAgICAgIFZpcnVzX0NlbGwgPSBWaXJ1c19DZWxsICU+JSBmYWN0b3IobGV2ZWxzID0gYygiR0ZISzk5IGluIE1EQ0siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdGSEs5OSBpbiBERi0xIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOTDA5IGluIE1EQ0siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hTU45OSBpbiBNRENLIikpKSAlPiUKICBuYS5vbWl0CgptMiA9IGxtKGZvcm11bGEgPSBSZWFzc29ydG1lbnQgfiAwICsgVmlydXNfQ2VsbDpsb2coRXhwcmVzc2luZ19IQSkgKyBWaXJ1c19DZWxsLAogICAgICAgIGRhdGEgPSBLUDQpCgpzMiA9IGNvZWZmaWNpZW50cyhtMikKCkJhc2UuUGxvdCA9IAogIGdncGxvdCgpICsKICB0aGVtZSh0ZXh0PWVsZW1lbnRfdGV4dChzaXplPTE0LGZhY2U9ImJvbGQiKSwKICAgICAgICBzdHJpcC50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksbWFyZ2luPW1hcmdpbigwLDAsMywwKSksCiAgICAgICAgc3RyaXAudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLG1hcmdpbj1tYXJnaW4oMCwwLDAsMCksYW5nbGU9MCksCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSkpLAogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT0wLHZqdXN0PTAsc2l6ZT1yZWwoMS41KSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgYXhpcy5saW5lLnggPSBlbGVtZW50X2xpbmUoc2l6ZT0wLjUpLAogICAgICAgIGF4aXMubGluZS55ID0gZWxlbWVudF9saW5lKHNpemU9MC41KSwKICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2xpbmUoc2l6ZT0wLjUsIGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgYXhpcy50aWNrcy55ID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjUsIGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuMiksY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS4yKSksCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIk5BIikKCkJhc2UuUGxvdCArCiAgZ2VvbV9wb2ludChkYXRhID0gS1A0LAogICAgICAgICAgICAgYWVzKHggPSBFeHByZXNzaW5nX0hBLAogICAgICAgICAgICAgICAgIHkgPSBSZWFzc29ydG1lbnQsCiAgICAgICAgICAgICAgICAgY29sb3IgPSBWaXJ1c19DZWxsKSwKICAgICAgICAgICAgIHNpemUgPSAyKSArCiAgZ2VvbV9zbW9vdGgoZGF0YSA9IEtQNCwKICAgICAgICAgICAgICBhZXMoeCA9IEV4cHJlc3NpbmdfSEEsCiAgICAgICAgICAgICAgICAgIHkgPSBSZWFzc29ydG1lbnQsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gVmlydXNfQ2VsbCksCiAgICAgICAgICAgICAgbWV0aG9kID0gImxtIiwKICAgICAgICAgICAgICBzZSA9IEZBTFNFLAogICAgICAgICAgICAgIGZvcm11bGEgPSB5IH4gbG9nKHgpKSArCiAgZ2VvbV9saW5lKGRhdGEgPSBQUDFfUmVhc3NvcnRtZW50LCAKICAgICAgICAgICAgYWVzKHggPSBFeHByZXNzaW5nLkhBLCAKICAgICAgICAgICAgICAgIHkgPSBSZWFzc29ydGFudC5QZXJjZW50KSwgCiAgICAgICAgICAgIGNvbG9yID0gImRpbWdyYXkiLAogICAgICAgICAgICBsdHkgPSAyLCAKICAgICAgICAgICAgbHdkID0gMSkgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsMTAwKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJHRkhLOTkgaW4gTURDSyIgPSAic2t5Ymx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdGSEs5OSBpbiBERi0xIiA9ICJkZWVwcGluazMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYU1OOTkgaW4gTURDSyIgPSAiZ3JlZW4zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTkwwOSBpbiBNRENLIiA9ICJnb2xkZW5yb2QiKSkgKwogIGFubm90YXRlKCJ0ZXh0Iix4ID0gNzUsIHkgPSA1LHNpemUgPSA2LGxhYmVsID0gVGVYKCJcXHRleHRiZntQcmVkaWN0aW9ufSIpLCBjb2xvciA9ICJkaW1ncmF5IikgKwogIGxhYnMoeD1leHByZXNzaW9uKGJvbGQoIiUgY2VsbHMgSEEiXiIrIikpLAogICAgICAgeT0iJSByZWFzc29ydG1lbnQiLAogICAgICAgY29sb3IgPSAiVmlydXM6Y2VsbCIsCiAgICAgICBmaWxsID0gIlZpcnVzOmNlbGwiKQoKZ2dzYXZlKCdQbG90cy8xQ19SZWFzc29ydG1lbnRfdl9IQS5wZGYnLAogICAgICAgd2lkdGggPSA0LAogICAgICAgaGVpZ2h0ID0gNCwKICAgICAgIHVuaXQgPSAiaW4iKQoKIyAxRDogQ2x1c3RlcmluZyAtLS0tCgptMiA9IGxtKGZvcm11bGEgPSBSZWFzc29ydG1lbnQgfiAwICsgVmlydXNfQ2VsbCArIFZpcnVzX0NlbGw6bG9nKEV4cHJlc3NpbmdfSEEpLAogICAgICAgIGRhdGEgPSBLUDQpCnMyID0gY29lZmZpY2llbnRzKG0yKQoKZGYxJFJlYXNzb3J0X2IwID0gczJbMToobGVuZ3RoKHMyKSAvIDIpXQpkZjEkUmVhc3NvcnRfYjEgPSBzMlsobGVuZ3RoKHMyKSAvIDIgKyAxKTpsZW5ndGgoczIpXQp2aXJ1c19jZWxsID0gZGYxJFN0cmFpbgpkZjEgPSBkZjFbLDI6bmNvbChkZjEpXQoKcm93bmFtZXMoZGYxKSA9IHZpcnVzX2NlbGwKZGYyID0gZGYxCgpyb3duYW1lcyhkZjIpID0gdmlydXNfY2VsbAoKZCA9IGRpc3QoZGYyLCBtZXRob2QgPSAiZXVjbGlkZWFuIiwgZGlhZyA9IFRSVUUpICU+JSBhcy5tYXRyaXgKcmVzdWx0ID0gcHZjbHVzdChkLCBtZXRob2QuaGNsdXN0ID0gIndhcmQiLAogICAgICAgICAgICAgICAgIG1ldGhvZC5kaXN0ID0gImNvcnJlbGF0aW9uIikKCnJlc3VsdCAlPiUgYXMuZGVuZHJvZ3JhbQoKZ2dkMSA9IHJlc3VsdCAlPiUgYXMuZGVuZHJvZ3JhbSAlPiUKICByb3RhdGUodmlydXNfY2VsbCAlPiUgcmV2KSAlPiUgCiAgc2V0KCJsYWJlbHNfY29sb3JzIixjKCJza3libHVlIiwiZGVlcHBpbmszIiwiZ29sZGVucm9kIiwiZ3JlZW4zIikgJT4lIHJldikgJT4lCiAgc2V0KCJsZWF2ZXNfY29sIixjKCJza3libHVlIiwiZGVlcHBpbmszIiwiZ29sZGVucm9kIiwiZ3JlZW4zIikgJT4lIHJldikgJT4lCiAgc2V0KCJsYWJlbHNfY2V4IiwxKSAlPiUKICBzZXQoImxlYXZlc19wY2giLDE2KSAlPiUKICBhcy5nZ2RlbmQKCkNsdXN0ZXJzID0gY3V0cmVlKHJlc3VsdCAlPiUgYXMuZGVuZHJvZ3JhbSAlPiUKICAgICAgICAgICAgICAgICAgICByb3RhdGUodmlydXNfY2VsbCksCiAgICAgICAgICAgICAgICAgIGsgPSAyKSAlPiUgcmV2CgpOb2RlLkJQID0gY2JpbmQocmVzdWx0JGhjbHVzdCRoZWlnaHQscmVzdWx0JGVkZ2VzJGF1LCByZXN1bHQkZWRnZXMkYnApICU+JSBkYXRhLmZyYW1lCmNvbG5hbWVzKE5vZGUuQlApID0gYygieSIsImF1IiwiYnAiKQoKTm9kZS5TdXBwb3J0ID0gZnVsbF9qb2luKGdnZDEkbm9kZXMgJT4lIGZpbHRlcih5ID4gMCksTm9kZS5CUCkgJT4lCiAgZHBseXI6Om11dGF0ZShBVSA9IChhdSAqIDEwMCkgJT4lIHJvdW5kKDApICU+JSBhcy5jaGFyYWN0ZXIpCgpnZ2QxJGxhYmVscyRjbHVzdGVyID0gQ2x1c3RlcnMKCmdnZDEkbGFiZWxzJHkgPSBnZ2QxJGxhYmVscyR5IC0gMC4yNQp4bWluID0gbWluKGMoZ2dkMSRzZWdtZW50cyR4LGdnZDEkc2VnbWVudHMkeGVuZCkpCnhtYXggPSBtYXgoYyhnZ2QxJHNlZ21lbnRzJHgsZ2dkMSRzZWdtZW50cyR4ZW5kKSkKeW1pbiA9IG1pbihjKGdnZDEkc2VnbWVudHMkeSxnZ2QxJHNlZ21lbnRzJHllbmQpKQp5bWF4ID0gbWF4KGMoZ2dkMSRzZWdtZW50cyR5LGdnZDEkc2VnbWVudHMkeWVuZCkpCgpSZWN0X3htaW4gPSBnZ2QxJGxhYmVscyAlPiUgCiAgZ3JvdXBfYnkoY2x1c3RlcikgJT4lIGRwbHlyOjpzdW1tYXJpc2UoeG1pbiA9IG1pbih4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWF4ID0gbWF4KHgpKQoKUmVjdF95bWF4ID0gcmV2KHNvcnQoZ2dkMSRub2RlcyR5KSlbMl0KUmVjdF95bWluID0geW1pbgpnZ2QxJG5vZGVzCmdncGxvdChnZ2QxLCBob3JpeiA9IFRSVUUpICsgCiAgdGhlbWVfZGVuZHJvKCkgKyAKICBnZW9tX3BvaW50KGRhdGEgPSBnZ2QxJG5vZGVzICU+JSBmaWx0ZXIobGVhZiA9PSBUUlVFKSwgYWVzKHggPSB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHkpLAogICAgICAgICAgICAgc2l6ZSA9IDMsCiAgICAgICAgICAgICBzdHJva2UgPSAxLAogICAgICAgICAgICAgcGNoID0gMjEpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiwgZmFjZSA9ICJib2xkIikpICsKICBnZW9tX3BvaW50KGRhdGEgPSBOb2RlLlN1cHBvcnQgJT4lIGZpbHRlcihhdSA+PSAwLjk1KSwKICAgICAgICAgICAgIGFlcyh4ID0geCwKICAgICAgICAgICAgICAgICB5ID0geSksCiAgICAgICAgICAgICBwY2ggPSAyMSwKICAgICAgICAgICAgIHN0cm9rZSA9IDEsCiAgICAgICAgICAgICBmaWxsID0gInllbGxvdyIsCiAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsCiAgICAgICAgICAgICBzaXplID0gMikgKwogIGNvb3JkX2ZsaXAoeGxpbSA9IGMoeG1pbiAtIC4xLHhtYXggKyAuMSksCiAgICAgICAgICAgICB5bGltID0gYyh5bWluIC0gMi41LHltYXgpKSArCiAgZ2VvbV9yZWN0KGRhdGEgPSBSZWN0X3htaW4sCiAgICAgICAgICAgIGFlcyh4bWluID0geG1pbiAtIC4yLAogICAgICAgICAgICAgICAgeG1heCA9IHhtYXggKyAuMiksCiAgICAgICAgICAgIHltaW4gPSBSZWN0X3ltaW4gLSAxLAogICAgICAgICAgICB5bWF4ID0gUmVjdF95bWF4ICsgMi41LAogICAgICAgICAgICBmaWxsID0gTkEsCiAgICAgICAgICAgIGNvbG9yID0gImRpbWdyYXkiLAogICAgICAgICAgICBsd2QgPSAxLjIsCiAgICAgICAgICAgIGx0eSA9IDgpCgpnZ3NhdmUoZmlsZSA9ICJQbG90cy8xRF9DbHVzdGVyLnBkZiIsCiAgICAgICBoZWlnaHQgPSA0LAogICAgICAgd2lkdGggPSA0LAogICAgICAgdW5pdHMgPSAiaW4iKQoKIyAxRTogUmVhc3NvcnRtZW50L0RpdmVyc2l0eSBpbiBHdWluZWEgUGlncyAtLS0tIAoKS0cgPSByZWFkLmNzdihmaWxlID0gZmlsZS5wYXRoKFByb2ouSG9tZSwiRGF0YSIsIjFGXzFHX0RhdGEuY3N2IiksIGhlYWRlciA9IFRSVUUpICU+JQogIG5hLm9taXQgJT4lICNSZW1vdmUgcm93cyB3aGVyZSBzb21lIHdlbGxzJyBnZW5lcyB3ZXJlIHVuY29kZWQKIGRwbHlyOjptdXRhdGUoRGF5ID0gYXMubnVtZXJpYyhEYXkpLAogICAgICAgICBEb3NlID0gZmFjdG9yKERvc2UpLAogICAgICAgICBTaG9ydC5JRCA9IGludGVyYWN0aW9uKFNob3J0LklELEV4cHQpLAogICAgICAgICBTcGVjaWVzID0gZmFjdG9yKFNwZWNpZXMsIGxldmVscyA9IGMoIkd1aW5lYSBQaWciLCJRdWFpbCIpKSwKICAgICAgICAgUlQgPSByZWNvZGUoT3JnYW4sIk5hc2FsIFN3YWIiID0gIlVSVCIsCiAgICAgICAgICAgICAgICAgICAgICJOYXNhbCBXYXNoIiA9ICJVUlQiLAogICAgICAgICAgICAgICAgICAgICAiVHJhY2hlYSIgPSAiVVJUIiwiTHVuZyIgPSAiTFJUIikgJT4lIAogICAgICAgICAgIGZhY3RvcihsZXZlbHMgPSBjKCJVUlQiLCJMUlQiKSkpIDsgS0cgPSBLRyAlPiUgCiBkcGx5cjo6bXV0YXRlKEdlbm90eXBlID0gR2Vub3R5cGVfQ29udmVydChWaXJpb25zID0gS0cpKQoKS0cuU3VtbWFyeSA9IEtHICU+JQogIGdyb3VwX2J5KFNob3J0LklELERheSxPcmdhbixEb3NlLFNwZWNpZXMsVmlydXMsUlQsRXhwdCkgJT4lIAogIGRwbHlyOjpzdW1tYXJpc2UoU2ltcHNvbiA9IFNpbXBzb25fRGl2ZXJzaXR5KEdlbm90eXBlKSkKCktHLlBsb3QgPSBnZ3Bsb3QoKSArCiAgdGhlbWUodGV4dD1lbGVtZW50X3RleHQoc2l6ZT0xNCxmYWNlPSJib2xkIiksCiAgICAgICAgc3RyaXAudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLG1hcmdpbj1tYXJnaW4oMCwwLDMsMCkpLAogICAgICAgIHN0cmlwLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSxtYXJnaW49bWFyZ2luKDAsMCwwLDApLGFuZ2xlPTApLAogICAgICAgIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpKSwKICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9MCx2anVzdD0wLHNpemU9cmVsKDEuNSksY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMubGluZS54ID0gZWxlbWVudF9saW5lKHNpemU9MC41KSwKICAgICAgICBheGlzLmxpbmUueSA9IGVsZW1lbnRfbGluZShzaXplPTAuNSksCiAgICAgICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9saW5lKHNpemU9MC41LCBjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjIpLGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuMikpLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpKQoKS0cuUGxvdCArCiAgZ2VvbV9qaXR0ZXIoZGF0YSA9IEtHLlN1bW1hcnkgJT4lIAogICAgICAgICAgICAgICAgZmlsdGVyKFZpcnVzICVpbiUgYygiR0ZISzk5IiwiTWFNTjk5IiwiTkwwOSIpLCBTcGVjaWVzID09ICJHdWluZWEgUGlnIiwgRG9zZSA9PSAxMDApICU+JSB1bmdyb3VwICU+JQogICAgICAgICAgICAgICBkcGx5cjo6bXV0YXRlKFZpcnVzID0gVmlydXMgJT4lIHN0cl9yZXBsYWNlKCJXRjEwIiwiR0ZISzk5IikpLAogICAgICAgICAgICAgIGFlcyh4ID0gRGF5LAogICAgICAgICAgICAgICAgICB5ID0gU2ltcHNvbiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSBWaXJ1cykpICsKICBnZW9tX3Ntb290aChkYXRhID0gS0cuU3VtbWFyeSAlPiUgZmlsdGVyKFZpcnVzICVpbiUgYygiR0ZISzk5IiwiTWFNTjk5IiwiTkwwOSIpLCBTcGVjaWVzID09ICJHdWluZWEgUGlnIiwgRG9zZSA9PSAxMDApICU+JSB1bmdyb3VwICU+JQogICAgICAgICAgICAgICBkcGx5cjo6bXV0YXRlKFZpcnVzID0gVmlydXMgJT4lIHN0cl9yZXBsYWNlKCJXRjEwIiwiR0ZISzk5IikpLAogICAgICAgICAgICAgIGFlcyh4ID0gRGF5LAogICAgICAgICAgICAgICAgICB5ID0gU2ltcHNvbiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSBWaXJ1cywKICAgICAgICAgICAgICAgICAgZmlsbCA9IFZpcnVzLAogICAgICAgICAgICAgICAgICBncm91cCA9IFZpcnVzKSwKICAgICAgICAgICAgICBtZXRob2QgPSAicmxtIikgKwogIGxhYnMoeCA9ICJUaW1lIHBvc3QtaW5vY3VsYXRpb24gKGRheXMpIiwKICAgICAgIHkgPSBUZVgoIlxcdGV4dGJme0VmZmVjdGl2ZSBkaXZlcnNpdHkgKEhpbGwncyAkXFxOXzIkKX0iKSkgKwogIGxhYnMoY29sb3IgPSAiVmlydXMiLAogICAgICAgZmlsbCA9ICJWaXJ1cyIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLDIwKSwgYnJlYWtzID0gYygwLDUsMTAsMTUsMjApKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IDA6NCkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJHRkhLOTkiID0gInNreWJsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYU1OOTkiID0gImdyZWVuMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5MMDkiID0gImdvbGRlbnJvZCIpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiR0ZISzk5IiA9ICJza3libHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYU1OOTkiID0gImdyZWVuMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTkwwOSIgPSAiZ29sZGVucm9kIikpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiTkEiKQoKZ2dzYXZlKCdQbG90cy8xRV9EaXZlcnNpdHkucGRmJywKICAgICAgIHdpZHRoID0gNCwKICAgICAgIGhlaWdodCA9IDQsCiAgICAgICB1bml0ID0gImluIikKCkxlZ2VuZC4xRSA9IEtHLlBsb3QgKwogIGdlb21faml0dGVyKGRhdGEgPSBLRy5TdW1tYXJ5ICU+JSAKICAgICAgICAgICAgICAgIGZpbHRlcihWaXJ1cyAlaW4lIGMoIkdGSEs5OSIsIk1hTU45OSIsIk5MMDkiKSwgU3BlY2llcyA9PSAiR3VpbmVhIFBpZyIsIERvc2UgPT0gMTAwKSAlPiUgdW5ncm91cCAlPiUKICAgICAgICAgICAgICAgIGRwbHlyOjptdXRhdGUoVmlydXMgPSBWaXJ1cyAlPiUgc3RyX3JlcGxhY2UoIldGMTAiLCJHRkhLOTkiKSksCiAgICAgICAgICAgICAgYWVzKHggPSBEYXksCiAgICAgICAgICAgICAgICAgIHkgPSBTaW1wc29uLAogICAgICAgICAgICAgICAgICBjb2xvciA9IFZpcnVzKSkgKwogIGdlb21fc21vb3RoKGRhdGEgPSBLRy5TdW1tYXJ5ICU+JSAKICAgICAgICAgICAgICAgIGZpbHRlcihWaXJ1cyAlaW4lIGMoIkdGSEs5OSIsIk1hTU45OSIsIk5MMDkiKSwgU3BlY2llcyA9PSAiR3VpbmVhIFBpZyIsIERvc2UgPT0gMTAwKSAlPiUgdW5ncm91cCAlPiUKICAgICAgICAgICAgICAgIGRwbHlyOjptdXRhdGUoVmlydXMgPSBWaXJ1cyAlPiUgc3RyX3JlcGxhY2UoIldGMTAiLCJHRkhLOTkiKSksCiAgICAgICAgICAgICAgYWVzKHggPSBEYXksCiAgICAgICAgICAgICAgICAgIHkgPSBTaW1wc29uLAogICAgICAgICAgICAgICAgICBjb2xvciA9IFZpcnVzLAogICAgICAgICAgICAgICAgICBmaWxsID0gVmlydXMsCiAgICAgICAgICAgICAgICAgIGdyb3VwID0gVmlydXMpLAogICAgICAgICAgICAgIG1ldGhvZCA9ICJybG0iKSArCiAgbGFicyh4ID0gIlRpbWUgcG9zdC1pbm9jdWxhdGlvbiAoZGF5cykiLAogICAgICAgeSA9IFRlWCgiXFx0ZXh0YmZ7RWZmZWN0aXZlIGRpdmVyc2l0eSAoSGlsbCdzICRcXE5fMiQpfSIpKSArCiAgbGFicyhjb2xvciA9ICJWaXJ1cyIsCiAgICAgICBmaWxsID0gIlZpcnVzIikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsMjApLCBicmVha3MgPSBjKDAsNSwxMCwxNSwyMCkpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMDo0KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIkdGSEs5OSIgPSAic2t5Ymx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hTU45OSIgPSAiZ3JlZW4zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTkwwOSIgPSAiZ29sZGVucm9kIikpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJHRkhLOTkiID0gInNreWJsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hTU45OSIgPSAiZ3JlZW4zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOTDA5IiA9ICJnb2xkZW5yb2QiKSkKCmdnc2F2ZShnX2xlZ2VuZChMZWdlbmQuMUUpLAogICAgICAgZmlsZSA9ICJQbG90cy9MZWdlbmRfMUUucGRmIiwKICAgICAgIGhlaWdodCA9IDMsCiAgICAgICB3aWR0aCA9IDIsCiAgICAgICB1bml0cyA9ICJpbiIpCgojIDFGOiBHRkhLOTkgcmVhc3NvcnRtZW50L2RpdmVyc2l0eSBpbiBkaXZlcnNlIGhvc3RzIC0tLS0gCgpLRy5QbG90ICsKICBnZW9tX2ppdHRlcihkYXRhID0gS0cuU3VtbWFyeSAlPiUgZmlsdGVyKFZpcnVzID09ICJHRkhLOTkiLCBTcGVjaWVzICVpbiUgYygiUXVhaWwiLCJHdWluZWEgUGlnIiksIERvc2UgPT0gMTAwKSwKICAgICAgICAgICAgICBhZXMoeCA9IERheSwKICAgICAgICAgICAgICAgICAgeSA9IFNpbXBzb24sCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gU3BlY2llcykpICsKICBnZW9tX3Ntb290aChkYXRhID0gS0cuU3VtbWFyeSAlPiUgZmlsdGVyKFZpcnVzID09ICJHRkhLOTkiLCBTcGVjaWVzICVpbiUgYygiUXVhaWwiLCJHdWluZWEgUGlnIiksIERvc2UgPT0gMTAwKSwKICAgICAgICAgICAgICBhZXMoeCA9IERheSwKICAgICAgICAgICAgICAgICAgeSA9IFNpbXBzb24sCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gU3BlY2llcywKICAgICAgICAgICAgICAgICAgZmlsbCA9IFNwZWNpZXMsCiAgICAgICAgICAgICAgICAgIGdyb3VwID0gU3BlY2llcyksCiAgICAgICAgICAgICAgbWV0aG9kID0gInJsbSIpICsKICBsYWJzKHggPSAiVGltZSBwb3N0LWlub2N1bGF0aW9uIChkYXlzKSIsCiAgICAgICB5ID0gVGVYKCJcXHRleHRiZntFZmZlY3RpdmUgZGl2ZXJzaXR5IChIaWxsJ3MgJFxcTl8yJCl9IikpICsKICBsYWJzKGNvbG9yID0gIkhvc3QiLAogICAgICAgZmlsbCA9ICJIb3N0IikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsMjApLCBicmVha3MgPSBjKDAsNSwxMCwxNSwyMCkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiR3VpbmVhIFBpZyIgPSAic2t5Ymx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlF1YWlsIiA9ICJkZWVwcGluazMiKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIkd1aW5lYSBQaWciID0gInNreWJsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlF1YWlsIiA9ICJkZWVwcGluazMiKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9IGMoMiwyKSkKCmdnc2F2ZSgnUGxvdHMvMUZfRGl2ZXJzaXR5X0dGSEs5OV9ieV9Ib3N0LnBkZicsCiAgICAgICB3aWR0aCA9IDQsCiAgICAgICBoZWlnaHQgPSA0LAogICAgICAgdW5pdCA9ICJpbiIpCgpMZWdlbmQuMUYgPSBLRy5QbG90ICsKICBnZW9tX2ppdHRlcihkYXRhID0gS0cuU3VtbWFyeSAlPiUgZmlsdGVyKFZpcnVzID09ICJHRkhLOTkiLCBTcGVjaWVzICVpbiUgYygiUXVhaWwiLCJHdWluZWEgUGlnIiksIERvc2UgPT0gMTAwKSwKICAgICAgICAgICAgICBhZXMoeCA9IERheSwKICAgICAgICAgICAgICAgICAgeSA9IFNpbXBzb24sCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gU3BlY2llcykpICsKICBnZW9tX3Ntb290aChkYXRhID0gS0cuU3VtbWFyeSAlPiUgZmlsdGVyKFZpcnVzID09ICJHRkhLOTkiLCBTcGVjaWVzICVpbiUgYygiUXVhaWwiLCJHdWluZWEgUGlnIiksIERvc2UgPT0gMTAwKSwKICAgICAgICAgICAgICBhZXMoeCA9IERheSwKICAgICAgICAgICAgICAgICAgeSA9IFNpbXBzb24sCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gU3BlY2llcywKICAgICAgICAgICAgICAgICAgZmlsbCA9IFNwZWNpZXMsCiAgICAgICAgICAgICAgICAgIGdyb3VwID0gU3BlY2llcyksCiAgICAgICAgICAgICAgbWV0aG9kID0gInJsbSIpICsKICBsYWJzKHggPSAiVGltZSBwb3N0LWlub2N1bGF0aW9uIChkYXlzKSIsCiAgICAgICB5ID0gVGVYKCJcXHRleHRiZntFZmZlY3RpdmUgZGl2ZXJzaXR5IChIaWxsJ3MgJFxcTl8yJCl9IikpICsKICBsYWJzKGNvbG9yID0gIkhvc3QiLAogICAgICAgZmlsbCA9ICJIb3N0IikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsMjApLCBicmVha3MgPSBjKDAsNSwxMCwxNSwyMCkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiR3VpbmVhIFBpZyIgPSAic2t5Ymx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlF1YWlsIiA9ICJkZWVwcGluazMiKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIkd1aW5lYSBQaWciID0gInNreWJsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlF1YWlsIiA9ICJkZWVwcGluazMiKSkKCgpnZ3NhdmUoZ19sZWdlbmQoTGVnZW5kLjFGKSwKICAgICAgIGZpbGUgPSAiUGxvdHMvTGVnZW5kXzFGLnBkZiIsCiAgICAgICBoZWlnaHQgPSAzLAogICAgICAgd2lkdGggPSAyLAogICAgICAgdW5pdHMgPSAiaW4iKQoKCktHLlN1bW1hcnkgJT4lIGZpbHRlcihEb3NlID09IDEwMCkgJT4lCiAgd3JpdGUuY3N2KGZpbGUgPSBmaWxlLnBhdGgoUHJvai5Ib21lLCJEYXRhL0RpdmVyc2l0eV9TdW1tYXJ5LmNzdiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgcm93Lm5hbWVzID0gRkFMU0UpCgoKYGBgCgpgYGB7ciBGaWd1cmUgMn0KCkJhc2UuUGxvdCA9IGdncGxvdCgpICsKICB0aGVtZSh0ZXh0PWVsZW1lbnRfdGV4dChzaXplPTE0LGZhY2U9ImJvbGQiKSwKICAgICAgICBzdHJpcC50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksbWFyZ2luPW1hcmdpbigwLDAsMywwKSksCiAgICAgICAgc3RyaXAudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLG1hcmdpbj1tYXJnaW4oMCwwLDAsMCksYW5nbGU9MCksCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSkpLAogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT0wLHZqdXN0PTAsc2l6ZT1yZWwoMS41KSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgYXhpcy5saW5lLnggPSBlbGVtZW50X2xpbmUoc2l6ZT0wLjUpLAogICAgICAgIGF4aXMubGluZS55ID0gZWxlbWVudF9saW5lKHNpemU9MC41KSwKICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2xpbmUoc2l6ZT0wLjUpLAogICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfbGluZShzaXplID0gMC41KSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS4yKSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjIpKSwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiTkEiKQoKIyAyRzogRm9sZCBjaGFuZ2UgYW1wbGlmaWNhdGlvbiB2cy4gTU9JIC0tLS0KCktQNy5UaXRlciA9IHJlYWQuY3N2KGZpbGUgPSBmaWxlLnBhdGgoUHJvai5Ib21lLCJEYXRhIiwiMkRfVGl0ZXJfRGF0YS5jc3YiKSwgaGVhZGVyID0gVFJVRSkgJT4lCiAgbmEub21pdCAlPiUgCiAgZmlsdGVyKFRpbWUgPj0gNCkgJT4lCiAgbXV0YXRlKEV4cHQgPSAxICsgKFJlcCA+IDMpLAogICAgICAgICBDZWxsID0gQ2VsbCAlPiUgc3RyX3JlcGxhY2VfYWxsKCJERjEiLCJERi0xIikpCktQNy5GQUNTID0gcmVhZC5jc3YoZmlsZSA9IGZpbGUucGF0aChQcm9qLkhvbWUsIkRhdGEiLCIyRF9GbG93X0RhdGEuY3N2IiksIGhlYWRlciA9IFRSVUUpICU+JQogIG5hLm9taXQgJT4lCiAgbXV0YXRlKEV4cHQgPSAxICsgKFJlcCA+IDMpLAogICAgICAgICBDZWxsID0gQ2VsbCAlPiUgc3RyX3JlcGxhY2VfYWxsKCJERjEiLCJERi0xIikpCgpLUDcuRkFDUy5TdW0gPSBLUDcuRkFDUyAlPiUgZHBseXI6Omdyb3VwX2J5KFN0cmFpbiwgQ2VsbCwgRXhwdCwgTU9JKSAlPiUKICBkcGx5cjo6c3VtbWFyaXNlKEZyYWNfSEEgPSBtZWFuKEhBKSAvIDEwMCwKICAgICAgICAgICAgICAgICAgIEZyYWNfSEEuc2UgPSBzZChIQSkgLyBzcXJ0KGxlbmd0aChIQSkpIC8gMTAwKSAlPiUKICBtdXRhdGUoVmlydXNfQ2VsbCA9IHN0cl9jKFN0cmFpbiwiIGluICIsQ2VsbCkpCgpLUDcuVGl0ZXIuU3VtID0gS1A3LlRpdGVyICU+JSBkcGx5cjo6Z3JvdXBfYnkoU3RyYWluLCBDZWxsLCBFeHB0LCBNT0ksIFJlcCkgJT4lCiAgZHBseXI6OnN1bW1hcmlzZShQcm9kdWNlZCA9IG1heChQRlUpICogMikgIyBUaXRlcnMgcmVwb3J0ZWQgYXJlIGluIFBGVS9tTCwgYnV0IGVhY2ggZGlzaCBjb250YWlucyAyIG1MLgoKS1A3LkJ1cnN0LlN1bSA9IHJpZ2h0X2pvaW4oS1A3LkZBQ1MuU3VtLCBLUDcuVGl0ZXIuU3VtKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKEhBX0NlbGxzID0gRnJhY19IQSAqIDFlNiwKICAgICAgICAgQnVyc3QgPSBQcm9kdWNlZCAvIEhBX0NlbGxzLAogICAgICAgICBBbXBsaWZpY2F0aW9uID0gUHJvZHVjZWQgLyAoTU9JICogMWU2KSwKICAgICAgICAgTU9JID0gbG9nMTAoTU9JKSwKICAgICAgICAgVmlydXNfQ2VsbCA9IHN0cl9jKFN0cmFpbiwiIGluICIsQ2VsbCkpCgpCYXNlLmRmID0gS1A3LkJ1cnN0LlN1bSAlPiUgCiAgZmlsdGVyKE1PSSA9PSAtMikgJT4lCiAgZ3JvdXBfYnkoVmlydXNfQ2VsbCkgJT4lCiAgZHBseXI6OnN1bW1hcmlzZShBbXBfQmFzZSA9IG1lYW4oQW1wbGlmaWNhdGlvbiksCiAgICAgICAgICAgIEJ1cnN0X0Jhc2UgPSBtZWFuKEJ1cnN0KSkKCk5vcm0uZGYgPSByaWdodF9qb2luKEtQNy5CdXJzdC5TdW0sQmFzZS5kZikgJT4lCiAgZmlsdGVyKEV4cHQgPT0gMikgJT4lCiAgZHBseXI6OnNlbGVjdChWaXJ1c19DZWxsLCBBbXBsaWZpY2F0aW9uLCBCdXJzdCwgQW1wX0Jhc2UsIEJ1cnN0X0Jhc2UsIE1PSSwgRnJhY19IQSkgJT4lCiAgbXV0YXRlKEFtcF9Ob3JtID0gQW1wbGlmaWNhdGlvbiAvIEFtcF9CYXNlLAogICAgICAgICBCdXJzdF9Ob3JtID0gQnVyc3QgLyBCdXJzdF9CYXNlKQoKCgpLUDcuR3Jvd3RoID0gS1A3LlRpdGVyICU+JQogIG11dGF0ZShQRlUgPSBsb2cxMChQRlUpLAogICAgICAgICBNT0kgPSBsb2cxMChNT0kpKSAlPiUKICBncm91cF9ieShNT0ksRXhwdCxUaW1lLFN0cmFpbixDZWxsKSAlPiUKICBkcGx5cjo6c3VtbWFyaXNlKFBGVS5zZSA9IHNkKFBGVSkvc3FydChsZW5ndGgoUEZVKSksCiAgICAgICAgICAgIFBGVS5NZWFuID0gbWVhbihQRlUpKQpOb3JtLlN1bS5kZiA9IE5vcm0uZGYgJT4lIG11dGF0ZShNT0kgPSAoMTBeTU9JKSAlPiUgcm91bmQoMikgJT4lIGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydXNfQ2VsbCA9IFZpcnVzX0NlbGwgJT4lIGZhY3RvcihsZXZlbHMgPSBjKCJXRjEwIGluIERGLTEiLCJXRjEwIGluIE1EQ0siLCJNTjk5IGluIE1EQ0siLCJOTDA5IGluIE1EQ0siKSkpICU+JQogIGdyb3VwX2J5KE1PSSxWaXJ1c19DZWxsKSAlPiUKICBkcGx5cjo6c3VtbWFyaXNlKEFtcF9Ob3JtX01lYW4gPSBtZWFuKEFtcF9Ob3JtKSwKICAgICAgICAgICAgICAgICAgIEFtcF9Ob3JtX3NlID0gc2QoQW1wX05vcm0pIC8gc3FydChsZW5ndGgoQW1wX05vcm0pKSkKQmFzZS5QbG90ICsgCiAgZ2VvbV9iYXIoZGF0YSA9IE5vcm0uU3VtLmRmLAogICAgICAgICAgIGFlcyh4ID0gTU9JLAogICAgICAgICAgICAgICB5ID0gQW1wX05vcm1fTWVhbiwKICAgICAgICAgICAgICAgZmlsbCA9IFZpcnVzX0NlbGwpLAogICAgICAgICAgIGx3ZCA9IDEsCiAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgIHBvc2l0aW9uID0gImRvZGdlIiwKICAgICAgICAgICBzdGF0ID0gImlkZW50aXR5IikgKwogIGdlb21fZXJyb3JiYXIoZGF0YSA9IE5vcm0uU3VtLmRmLAogICAgICAgICAgIGFlcyh4ID0gTU9JLAogICAgICAgICAgICAgICB5bWluID0gQW1wX05vcm1fTWVhbiAtIEFtcF9Ob3JtX3NlLAogICAgICAgICAgICAgICB5bWF4ID0gQW1wX05vcm1fTWVhbiArIEFtcF9Ob3JtX3NlKSwKICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMih3aWR0aCA9IDAuOSxwYWRkaW5nID0gMC40KSwKICAgICAgICAgICBsd2QgPSAwLjgsCiAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9qaXR0ZXIoZGF0YSA9IE5vcm0uZGYgJT4lIG11dGF0ZShNT0kgPSAoMTBeTU9JKSAlPiUgcm91bmQoMikgJT4lIGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnVzX0NlbGwgPSBWaXJ1c19DZWxsICU+JSBmYWN0b3IobGV2ZWxzID0gYygiV0YxMCBpbiBERi0xIiwiV0YxMCBpbiBNRENLIiwiTU45OSBpbiBNRENLIiwiTkwwOSBpbiBNRENLIikpKSwKICAgICAgICAgICAgICBhZXMoeCA9IE1PSSwKICAgICAgICAgICAgICAgICAgeSA9IEFtcF9Ob3JtLAogICAgICAgICAgICAgICAgICBmaWxsID0gVmlydXNfQ2VsbCksCiAgICAgICAgICAgICAgc2hhcGUgPSAyMSwKICAgICAgICAgICAgICBzdHJva2UgPSAxLAogICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHdpZHRoID0gMC45LCBwYWRkaW5nID0gMC4yKSwKICAgICAgICAgICAgICAKICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBsYWJzKHggPSBUZVgoIlxcdGV4dGJme01PSSAoJFxcbG9nXzFfMCQgUEZVL2NlbGwpfSIpLAogICAgICAgeSA9ICJGb2xkIGNoYW5nZSBpbiBhbXBsaWZpY2F0aW9uIikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJXRjEwIGluIE1EQ0siID0gInNreWJsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNTjk5IGluIE1EQ0siID0gImdyZWVuMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldGMTAgaW4gREYtMSIgPSAiZGVlcHBpbmszIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTkwwOSBpbiBNRENLIiA9ICJnb2xkZW5yb2QiKSwKICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBGQUxTRSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIldGMTAgaW4gTURDSyIgPSAic2t5Ymx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTU45OSBpbiBNRENLIiA9ICJncmVlbjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldGMTAgaW4gREYtMSIgPSAiZGVlcHBpbmszIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOTDA5IGluIE1EQ0siID0gImdvbGRlbnJvZCIpLAogICAgICAgICAgICAgICAgICAgIGd1aWRlID0gRkFMU0UpCgpnZ3NhdmUoJ1Bsb3RzLzJHX0FtcGxpZmljYXRpb25fYnlfTU9JX0Jhci5wZGYnLAogICAgICAgd2lkdGggPSA0LAogICAgICAgaGVpZ2h0ID0gNCwKICAgICAgIHVuaXQgPSAiaW4iKQoKTGVnZW5kLjJEID0gQmFzZS5QbG90ICsgZ2VvbV9iYXIoZGF0YSA9IE5vcm0uZGYgJT4lIG11dGF0ZShNT0kgPSAoMTBeTU9JKSAlPiUgcm91bmQoMikgJT4lIGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ1c19DZWxsID0gVmlydXNfQ2VsbCAlPiUgZmFjdG9yKGxldmVscyA9IGMoIldGMTAgaW4gREYtMSIsIldGMTAgaW4gTURDSyIsIk1OOTkgaW4gTURDSyIsIk5MMDkgaW4gTURDSyIpKSkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkoTU9JLFZpcnVzX0NlbGwpICU+JQogICAgICAgICAgICAgICAgICAgICAgIGRwbHlyOjpzdW1tYXJpc2UoQW1wX05vcm1fTWVhbiA9IG1lYW4oQW1wX05vcm0pKSwKICAgICAgICAgICAgICAgICAgICAgYWVzKHggPSBNT0ksCiAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gQW1wX05vcm1fTWVhbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBWaXJ1c19DZWxsKSwKICAgICAgICAgICAgICAgICAgICAgbHdkID0gMSwKICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9ICJkb2RnZSIsCiAgICAgICAgICAgICAgICAgICAgIHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgbGFicyh4ID0gVGVYKCJcXHRleHRiZntNT0kgKCRcXGxvZ18xXzAkIFBGVS9jZWxsKX0iKSwKICAgICAgIHkgPSAiRm9sZCBjaGFuZ2UgaW4gYW1wbGlmaWNhdGlvbiIsCiAgICAgICBmaWxsID0gIlZpcnVzOmNlbGwiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIldGMTAgaW4gTURDSyIgPSAic2t5Ymx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1OOTkgaW4gTURDSyIgPSAiZ3JlZW4zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV0YxMCBpbiBERi0xIiA9ICJkZWVwcGluazMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOTDA5IGluIE1EQ0siID0gImdvbGRlbnJvZCIpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiV0YxMCBpbiBNRENLIiA9ICJza3libHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNTjk5IGluIE1EQ0siID0gImdyZWVuMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV0YxMCBpbiBERi0xIiA9ICJkZWVwcGluazMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5MMDkgaW4gTURDSyIgPSAiZ29sZGVucm9kIikpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKQoKZ2dzYXZlKGdfbGVnZW5kKExlZ2VuZC4yRCksCiAgICAgICBmaWxlID0gIlBsb3RzL0xlZ2VuZF8yRy5wZGYiLAogICAgICAgaGVpZ2h0ID0gMywKICAgICAgIHdpZHRoID0gMiwKICAgICAgIHVuaXRzID0gImluIikKCiMgMkg6IEJ1cnN0IHZzLiBNT0kgLS0tLQoKREYxLk1heCA9IEtQNy5CdXJzdC5TdW0gJT4lCiAgZmlsdGVyKEV4cHQgPT0gMSwKICAgICAgICAgQ2VsbCA9PSAiREYtMSIpCkRGMS5NYXggPSBtYXgoREYxLk1heCRCdXJzdClbMV0KCk1EQ0suTWF4ID0gS1A3LkJ1cnN0LlN1bSAlPiUKICBmaWx0ZXIoRXhwdCA9PSAxLAogICAgICAgICBDZWxsID09ICJNRENLIikKTURDSy5NYXggPSBtYXgoTURDSy5NYXgkQnVyc3QpWzFdCgpERjEuT2Zmc2V0ID0gTURDSy5NYXggLyBERjEuTWF4IC0gMQoKS1A3LkJ1cnN0LlN1bSAlPiUKICBmaWx0ZXIoRXhwdCA9PSAxKSAlPiUKICBtdXRhdGUoQnVyc3QgPSBCdXJzdCArIEJ1cnN0ICogKERGMS5PZmZzZXQgKiAoQ2VsbCA9PSAiREYtMSIpKSwKICAgICAgICAgTU9JID0gMTBeKE1PSSkgJT4lIGZhY3RvcikgJT4lCiAgZ3JvdXBfYnkoQ2VsbCwgTU9JKSAlPiUKICBzdW1tYXJpc2UoQnVyc3RfTWVhbiA9IG1lYW4oQnVyc3QpKQoKCktQNy5CdXJzdC5TdW0gJT4lCiAgICBtdXRhdGUoQnVyc3QgPSBCdXJzdCArIEJ1cnN0ICogKERGMS5PZmZzZXQgKiAoQ2VsbCA9PSAiREYtMSIpKSwKICAgICAgICAgICBNT0kgPSAxMF4oTU9JKSAlPiUgZmFjdG9yKQogIApLUDcuQnVyc3QuU3VtLjIgPSBLUDcuQnVyc3QuU3VtICU+JQogIGZpbHRlcihFeHB0ID09IDEpICU+JSAKICBtdXRhdGUoQnVyc3QgPSBCdXJzdCArIEJ1cnN0ICogKERGMS5PZmZzZXQgKiAoQ2VsbCA9PSAiREYtMSIpKSwKICAgICAgICAgTU9JID0gMTBeKE1PSSkgJT4lIGZhY3RvcikgJT4lCiAgZ3JvdXBfYnkoQ2VsbCwgTU9JKSAlPiUKICBkcGx5cjo6c3VtbWFyaXNlKEJ1cnN0X01lYW4gPSBtZWFuKEJ1cnN0KSwKICAgICAgICAgICAgICAgICAgIEJ1cnN0X3NlID0gc2QoQnVyc3QpIC8gc3FydChsZW5ndGgoQnVyc3QpKSkKICAKQmFzZS5QbG90ICsKICBnZW9tX2JhcihkYXRhID0gS1A3LkJ1cnN0LlN1bS4yLAogICAgICAgICAgIGFlcyh4ID0gTU9JICU+JSBmYWN0b3IsCiAgICAgICAgICAgICAgIHkgPSBCdXJzdF9NZWFuLAogICAgICAgICAgICAgICBmaWxsID0gQ2VsbCksCiAgICAgICAgICAgc3RhdCA9ICJpZGVudGl0eSIsCiAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgIGx3ZCA9IDEsCiAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgwLjkpKSArCiAgZ2VvbV9lcnJvcmJhcihkYXRhID0gS1A3LkJ1cnN0LlN1bS4yLAogICAgICAgICAgICAgICAgYWVzKHggPSBNT0kgJT4lIGZhY3RvciwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gQnVyc3RfTWVhbiArIEJ1cnN0X3NlLAogICAgICAgICAgICAgICAgICAgIHltaW4gPSBCdXJzdF9NZWFuIC0gQnVyc3Rfc2UpLAogICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIod2lkdGggPSAwLjkscGFkZGluZyA9IDAuMiksCiAgICAgICAgICAgICAgICBsd2QgPSAwLjgpICsKICBnZW9tX2ppdHRlcihkYXRhID0gS1A3LkJ1cnN0LlN1bSAlPiUgCiAgICAgICAgICAgICAgIGZpbHRlcihFeHB0ID09IDEpICU+JSAKICAgICAgICAgICAgICAgbXV0YXRlKEJ1cnN0ID0gQnVyc3QgKyBCdXJzdCAqIChERjEuT2Zmc2V0ICogKENlbGwgPT0gIkRGLTEiKSksCiAgICAgICAgICAgICAgICAgICAgICBNT0kgPSAxMF4oTU9JKSAlPiUgZmFjdG9yKSwKICAgICAgICAgICAgIGFlcyh4ID0gTU9JICU+JSBmYWN0b3IsCiAgICAgICAgICAgICAgICAgeSA9IEJ1cnN0LAogICAgICAgICAgICAgICAgIGZpbGwgPSBDZWxsKSwKICAgICAgICAgICAgIHNoYXBlID0gMjEsCiAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsCiAgICAgICAgICAgICBzdHJva2UgPSAxLAogICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIod2lkdGggPSAuOSwgcGFkZGluZyA9IDAuMikpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoc2VjLmF4aXMgPSBzZWNfYXhpcyh+LiAvIChERjEuT2Zmc2V0ICsgMSksIG5hbWUgPSBUZVgoIlxcdGV4dGJme0RGLTEgYnVyc3Qgc2l6ZSAoUEZVL0hBXisgY2VsbCl9IikpKSArCiAgCiAgbGFicyh5ID0gVGVYKCJcXHRleHRiZntNRENLIGJ1cnN0IHNpemUgKFBGVS9IQV4rIGNlbGwpfSIpLAogICAgICAgeCA9IFRlWCgiXFx0ZXh0YmZ7TU9JICgkXFxsb2dfMV8wJCBQRlUvY2VsbCl9IikpICsKICBzY2FsZV9zaGFwZShndWlkZSA9IEZBTFNFKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIkRGLTEiID0gImRlZXBwaW5rMyIsICJNRENLIiA9ICJza3libHVlIiksIGd1aWRlID0gRkFMU0UpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJERi0xIiA9ICJkZWVwcGluazMiLCAiTURDSyIgPSAic2t5Ymx1ZSIpLCBndWlkZSA9IEZBTFNFKQoKZ2dzYXZlKCdQbG90cy8ySF9CdXJzdF9ieV9NT0lfSGlnaF9CYXIucGRmJywKICAgICAgIHdpZHRoID0gNCwKICAgICAgIGhlaWdodCA9IDQsCiAgICAgICB1bml0ID0gImluIikKCmBgYAoKYGBge3IgRmlndXJlIDN9CgpQb2lzX0V4cCA9IGZ1bmN0aW9uKEhBKSB7CiAgCiAgbGFtID0gLWxvZygxIC0gSEEpCiAgCiAgRHVhbCA9IHJlcCgwLGxlbmd0aChIQSkpCiAgCiAgZm9yIChpIGluIDE6bGVuZ3RoKEhBKSkgewogICAgRHVhbFtpXSA9IHN1bShkcG9pcyh4ID0gMToyMCwgbGFtYmRhID0gbGFtW2ldKSAqICgxIC0gMiBeICgxIC0gMToyMCkpKQogIH0KICAKICBEdWFsCn0KCnNldC5zZWVkKDY2NikKCldGMTAuU2VnbWVudHMgPSBjKCJBbGwgR0ZISzk5IiwgIlBCMiArIFBCMSArIFBBICsgTlAiLCJQQjIiLCJQQjEiLCJQQSIsIk5QIiwiSEEgKyBOQSArIE0gKyBOUyIsICJIQSIsICJOb25lLCBhbGwgTWFNTjk5IikKCiMgUmVhc3NvcnRtZW50IGRhdGEgLS0tLQoKUFAxX1JlYXNzb3J0bWVudCA9IHJlYWQuY3N2KGZpbGUgPSBmaWxlLnBhdGgoUHJvai5Ib21lLCJEYXRhL1BQMV9SZWFzc29ydG1lbnQuY3N2IikpCktQMyA9IHJlYWQuY3N2KGZpbGUgPSBmaWxlLnBhdGgoUHJvai5Ib21lLCJEYXRhIiwiM0FfM0NfRGF0YS5jc3YiKSwgaGVhZGVyID0gVFJVRSkgJT4lCiAgbmEub21pdCAlPiUgCiAgbXV0YXRlKFN0cmFpbiA9IHJlY29kZShTdHJhaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAiR0ZISzk5IiA9ICJBbGwgR0ZISzk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICJNYU1OOTkiID0gIk5vbmUsIGFsbCBNYU1OOTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIkhBX05BX01fTlMiID0gIkhBICsgTkEgKyBNICsgTlMiLAogICAgICAgICAgICAgICAgICAgICAgICAgIjNQX05QIiA9ICJQQjIgKyBQQjEgKyBQQSArIE5QIikgJT4lCiAgICAgICAgICAgZmFjdG9yKGxldmVscyA9IGMoIkFsbCBHRkhLOTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQjIgKyBQQjEgKyBQQSArIE5QIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEIyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBICsgTkEgKyBNICsgTlMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbmUsIGFsbCBNYU1OOTkiKSkpCkJhc2UuUGxvdCA9IGdncGxvdCgpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiQWxsIEdGSEs5OSIgPSAiZmlyZWJyaWNrMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBCMiArIFBCMSArIFBBICsgTlAiID0gIm9yYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBCMiIgPSAiZGFya29yY2hpZDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQjEiID0gImdyZWVuMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBBIiA9ICJnb2xkZW5yb2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOUCIgPSAibmF2eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBIiA9ICJzdGVlbGJsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQSArIE5BICsgTSArIE5TIiA9ICJkZWVwc2t5Ymx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbmUsIGFsbCBNYU1OOTkiID0gImJsYWNrIikpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJBbGwgR0ZISzk5IiA9ICJmaXJlYnJpY2szIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEIyICsgUEIxICsgUEEgKyBOUCIgPSAib3JhbmdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEIyIiA9ICJkYXJrb3JjaGlkMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBCMSIgPSAiZ3JlZW4zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEEiID0gImdvbGRlbnJvZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5QIiA9ICJuYXZ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEEiID0gInN0ZWVsYmx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBICsgTkEgKyBNICsgTlMiID0gImRlZXBza3libHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uZSwgYWxsIE1hTU45OSIgPSAiYmxhY2siKSkgKwogIHRoZW1lKHRleHQ9ZWxlbWVudF90ZXh0KHNpemU9MTQsZmFjZT0iYm9sZCIpLAogICAgICAgIHN0cmlwLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSxtYXJnaW49bWFyZ2luKDAsMCwzLDApKSwKICAgICAgICBzdHJpcC50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksbWFyZ2luPW1hcmdpbigwLDAsMCwwKSxhbmdsZT0wKSwKICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSksCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTAsdmp1c3Q9MCxzaXplPXJlbCgxLjUpLGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLmxpbmUueCA9IGVsZW1lbnRfbGluZShzaXplPTAuNSksCiAgICAgICAgYXhpcy5saW5lLnkgPSBlbGVtZW50X2xpbmUoc2l6ZT0wLjUpLAogICAgICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfbGluZShzaXplPTAuNSwgY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLnRpY2tzLnkgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS4yKSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjIpKSwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiTkEiKQoKIyAzQTogUmVhc3NvcnRtZW50IG9mIDQ6NCBjaGltZXJhcyAtLS0tCkJhc2UuUGxvdCArIAogIGdlb21fcG9pbnQoZGF0YSA9IEtQMyAlPiUgZmlsdGVyKFN0cmFpbiAlaW4lIGMoIkFsbCBHRkhLOTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBCMiArIFBCMSArIFBBICsgTlAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBICsgTkEgKyBNICsgTlMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbmUsIGFsbCBNYU1OOTkiKSksCiAgICAgICAgICAgICBhZXMoeCA9IEV4cHJlc3NpbmdfSEEsCiAgICAgICAgICAgICAgICAgeSA9IFJlYXNzb3J0bWVudCwKICAgICAgICAgICAgICAgICBjb2xvciA9IFN0cmFpbikpICsKICBnZW9tX3Ntb290aChkYXRhID0gS1AzJT4lIGZpbHRlcihTdHJhaW4gJWluJSBjKCJBbGwgR0ZISzk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQjIgKyBQQjEgKyBQQSArIE5QIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQSArIE5BICsgTSArIE5TIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb25lLCBhbGwgTWFNTjk5IikpLAogICAgICAgICAgICAgIGFlcyh4ID0gRXhwcmVzc2luZ19IQSwKICAgICAgICAgICAgICAgICAgeSA9IFJlYXNzb3J0bWVudCwKICAgICAgICAgICAgICAgICAgY29sb3IgPSBTdHJhaW4pLAogICAgICAgICAgICAgIG1ldGhvZCA9ICJsbSIsCiAgICAgICAgICAgICAgc2UgPSBGQUxTRSwKICAgICAgICAgICAgICBmb3JtdWxhID0geSB+IGxvZyh4KSkgKwogIGdlb21fbGluZShkYXRhID0gUFAxX1JlYXNzb3J0bWVudCwgCiAgICAgICAgICAgIGFlcyh4ID0gRXhwcmVzc2luZy5IQSwgCiAgICAgICAgICAgICAgICB5ID0gUmVhc3NvcnRhbnQuUGVyY2VudCksIAogICAgICAgICAgICBjb2xvciA9ICJkaW1ncmF5IiwKICAgICAgICAgICAgbHR5ID0gMiwgCiAgICAgICAgICAgIGx3ZCA9IDEpICsKICBhbm5vdGF0ZSgidGV4dCIseCA9IDc1LCB5ID0gNSxzaXplID0gNixsYWJlbCA9IFRlWCgiXFx0ZXh0YmZ7UHJlZGljdGlvbn0iKSwgY29sb3IgPSAiZGltZ3JheSIpICsKICBsYWJzKHggPSBleHByZXNzaW9uKGJvbGQoIiUgY2VsbHMgSEEiXiIrIikpLAogICAgICAgeSA9ICIlIHJlYXNzb3J0bWVudCIsCiAgICAgICBjb2xvciA9ICJHRkhLOTkgc2VnbWVudHMiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoMCwyNSw1MCw3NSwxMDApKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IGMoMCwyNSw1MCw3NSwxMDApKSArCiAgY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKDAsMTAwKSwgeWxpbSA9IGMoMCwxMDApKQoKZ2dzYXZlKCdQbG90cy8zQV80XzRfUmVhc3NvcnRtZW50LnBkZicsCiAgICAgICB3aWR0aCA9IDQsCiAgICAgICBoZWlnaHQgPSA0LAogICAgICAgdW5pdCA9ICJpbiIpCgojIDNDOiBSZWFzc29ydG1lbnQgb2YgMTo3IGNoaW1lcmFzIC0tLS0KCkJhc2UuUGxvdCArIAogIGdlb21fcG9pbnQoZGF0YSA9IEtQMyAlPiUgZmlsdGVyKFN0cmFpbiAlaW4lIGMoIkFsbCBHRkhLOTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBCMiIsICJQQjEiLCAiUEEiLCAiTlAiLCJIQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uZSwgYWxsIE1hTU45OSIpKSwKICAgICAgICAgICAgIGFlcyh4ID0gRXhwcmVzc2luZ19IQSwKICAgICAgICAgICAgICAgICB5ID0gUmVhc3NvcnRtZW50LAogICAgICAgICAgICAgICAgIGNvbG9yID0gU3RyYWluKSkgKwogIGdlb21fc21vb3RoKGRhdGEgPSBLUDMgJT4lIGZpbHRlcihTdHJhaW4gJWluJSBjKCJBbGwgR0ZISzk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEIyIiwgIlBCMSIsICJQQSIsICJOUCIsIkhBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uZSwgYWxsIE1hTU45OSIpKSwKICAgICAgICAgICAgICBhZXMoeCA9IEV4cHJlc3NpbmdfSEEsCiAgICAgICAgICAgICAgICAgIHkgPSBSZWFzc29ydG1lbnQsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gU3RyYWluKSwKICAgICAgICAgICAgICBtZXRob2QgPSAibG0iLAogICAgICAgICAgICAgIHNlID0gRkFMU0UsCiAgICAgICAgICAgICAgZm9ybXVsYSA9IHkgfiBsb2coeCkpICsKICBnZW9tX2xpbmUoZGF0YSA9IFBQMV9SZWFzc29ydG1lbnQsIAogICAgICAgICAgICBhZXMoeCA9IEV4cHJlc3NpbmcuSEEsIAogICAgICAgICAgICAgICAgeSA9IFJlYXNzb3J0YW50LlBlcmNlbnQpLCAKICAgICAgICAgICAgY29sb3IgPSAiZGltZ3JheSIsCiAgICAgICAgICAgIGx0eSA9IDIsIAogICAgICAgICAgICBsd2QgPSAxKSArCiAgYW5ub3RhdGUoInRleHQiLHggPSA3NSwgeSA9IDUsc2l6ZSA9IDYsbGFiZWwgPSBUZVgoIlxcdGV4dGJme1ByZWRpY3Rpb259IiksIGNvbG9yID0gImRpbWdyYXkiKSArCiAgbGFicyh4ID0gZXhwcmVzc2lvbihib2xkKCIlIGNlbGxzIEhBIl4iKyIpKSwKICAgICAgIHkgPSAiJSByZWFzc29ydG1lbnQiLAogICAgICAgY29sb3IgPSAiR0ZISzk5IHNlZ21lbnRzIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDAsMjUsNTAsNzUsMTAwKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBjKDAsMjUsNTAsNzUsMTAwKSkgKwogIGNvb3JkX2NhcnRlc2lhbih4bGltID0gYygwLDEwMCksIHlsaW0gPSBjKDAsMTAwKSkKCmdnc2F2ZSgnUGxvdHMvM0NfMV83X1JlYXNzb3J0bWVudC5wZGYnLAogICAgICAgd2lkdGggPSA0LAogICAgICAgaGVpZ2h0ID0gNCwKICAgICAgIHVuaXQgPSAiaW4iKQoKS1AzICU+JSBncm91cF9ieShTdHJhaW4pICU+JQogIGRwbHlyOjpzdW1tYXJpc2UoTiA9IGxlbmd0aChFeHByZXNzaW5nX0hBKSkKCiMgM0Y6IFJlYXNzb3J0bWVudCBhdCAxMCUgSEErIC0tLS0KCm0xID0gbG0oZm9ybXVsYSA9IFJlYXNzb3J0bWVudCB+IDAgKyBTdHJhaW46bG9nKEV4cHJlc3NpbmdfSEEpICsgU3RyYWluLAogICAgICAgIGRhdGEgPSBLUDMpCgpzMSA9IGNvZWZmaWNpZW50cyhtMSkKCmRmMSA9IG1hdHJpeChucm93ID0gbGVuZ3RoKGxldmVscyhLUDMkU3RyYWluKSksCiAgICAgICAgICAgICBuY29sID0gMykKY29sbmFtZXMoZGYxKSA9IGMoIlN0cmFpbiIsIkV4cHJlc3NpbmdfSEEiLCJSZWFzc29ydG1lbnRfMTAiKQoKZGYxID0gZGF0YS5mcmFtZShkZjEpCgpkZjEkU3RyYWluID0gbGV2ZWxzKEtQMyRTdHJhaW4pICU+JSBmYWN0b3IobGV2ZWxzID0gYygiQWxsIEdGSEs5OSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQjIgKyBQQjEgKyBQQSArIE5QIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBCMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQjEiLCJQQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQSArIE5BICsgTSArIE5TIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbmUsIGFsbCBNYU1OOTkiKSAlPiUgcmV2KQpkZjEkRXhwcmVzc2luZ19IQSA9IDEwCmRmMSRSZWFzc29ydG1lbnRfMTAgPSBwcmVkaWN0KG0xLGRmMSkKCkJhc2UuUGxvdCArIAogIGdlb21fYmFyKGRhdGEgPSBkZjEsIyAlPiUgZmlsdGVyKFN0cmFpbiAlaW4lIFdGMTAuU2VnbWVudHNbYygxLDIsNiw3LDgsOSldKSwKICAgICAgICAgICBhZXMoeCA9IFN0cmFpbiwKICAgICAgICAgICAgICAgeSA9IFJlYXNzb3J0bWVudF8xMCwKICAgICAgICAgICAgICAgZmlsbCA9IFN0cmFpbiksCiAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgIHN0YXQgPSAiaWRlbnRpdHkiKSArIAogIGxhYnMoeSA9IFRlWCgiXFx0ZXh0YmZ7JSByZWFzc29ydG1lbnQgYXQgMTAlICRcXEhBXiskfSIpLAogICAgICAgeCA9ICJHRkhLOTkgc2VnbWVudHMiKSArCiAgY29vcmRfZmxpcCh5bGltID0gYygwLDEwMCkpCgpnZ3NhdmUoJ1Bsb3RzLzNGX1JlYXNzb3J0bWVudF9hdF8xMF9IQS5wZGYnLAogICAgICAgd2lkdGggPSA2LAogICAgICAgaGVpZ2h0ID0gNCwKICAgICAgIHVuaXQgPSAiaW4iKQoKIyAzRDogJSBEdWFsLUhBKyB2cy4gJSBIQSsgLS0tLQoKS1A2ID0gcmVhZC5jc3YoZmlsZSA9IGZpbGUucGF0aChQcm9qLkhvbWUsIkRhdGEiLCIzQl8zRF9EYXRhLmNzdiIpLCBoZWFkZXIgPSBUUlVFKSAlPiUKICBuYS5vbWl0ICU+JSAKICBtdXRhdGUoU3RyYWluID0gcmVjb2RlKFN0cmFpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICJHRkhLOTkiID0gIkFsbCBHRkhLOTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIk1hTU45OSIgPSAiTm9uZSwgYWxsIE1hTU45OSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiSEFfTkFfTV9OUyIgPSAiSEEgKyBOQSArIE0gKyBOUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiM1BfTlAiID0gIlBCMiArIFBCMSArIFBBICsgTlAiKSAlPiUKICAgICAgICAgICBmYWN0b3IobGV2ZWxzID0gYygiQWxsIEdGSEs5OSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBCMiArIFBCMSArIFBBICsgTlAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5QIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEEgKyBOQSArIE0gKyBOUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uZSwgYWxsIE1hTU45OSIpKSkKCkV4cF9EdWFsX0hBID0gcmVhZC5jc3YoZmlsZSA9IGZpbGUucGF0aChQcm9qLkhvbWUsIkRhdGEiLCJQb2lzc29uX0R1YWxIQV9EYXRhLmNzdiIpLCBoZWFkZXIgPSBUUlVFKQoKIyAzQjogSEEgY28tZXhwcmVzc2lvbiBieSA0OjQgY2hpbWVyYXMKCkJhc2UuUGxvdCArCiAgZ2VvbV9hYmxpbmUoc2xvcGUgPSAxLAogICAgICAgICAgICAgIGNvbG9yID0gImRpbWdyYXkiLAogICAgICAgICAgICAgIGx0eSA9IDMsCiAgICAgICAgICAgICAgbHdkID0gMSkgKwogIGdlb21fbGluZShkYXRhID0gRXhwX0R1YWxfSEEgLCAKICAgICAgICAgICAgYWVzKHggPSBwSEEgKiAxMDAsIAogICAgICAgICAgICAgICAgeSA9IHBEdWFsICogMTAwKSwgCiAgICAgICAgICAgIGNvbG9yID0gImRpbWdyYXkiLAogICAgICAgICAgICBsdHkgPSAyLCAKICAgICAgICAgICAgbHdkID0gMSkgKwogIGFubm90YXRlKCJ0ZXh0Iix4ID0gODAsIHkgPSA5NSxzaXplID0gNixsYWJlbCA9IFRlWCgiXFx0ZXh0YmZ7eCA9IHl9IiksIGNvbG9yID0gImRpbWdyYXkiKSArCiAgYW5ub3RhdGUoInRleHQiLHggPSA4MCwgeSA9IDUsc2l6ZSA9IDYsbGFiZWwgPSBUZVgoIlxcdGV4dGJme1ByZWRpY3Rpb259IiksIGNvbG9yID0gImRpbWdyYXkiKSArCiAgZ2VvbV9zbW9vdGgoZGF0YSA9IEtQNiAlPiUgZmlsdGVyKFN0cmFpbiAlaW4lIGMoIkFsbCBHRkhLOTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQjIgKyBQQjEgKyBQQSArIE5QIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEEgKyBOQSArIE0gKyBOUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbmUsIGFsbCBNYU1OOTkiKSksCiAgICAgICAgICAgICAgYWVzKHggPSBFeHByZXNzaW5nX0hBLAogICAgICAgICAgICAgICAgICB5ID0gRHVhbF9IQSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSBTdHJhaW4sCiAgICAgICAgICAgICAgICAgIGZpbGwgPSBTdHJhaW4pLAogICAgICAgICAgICAgIG1ldGhvZCA9ICJybG0iLAogICAgICAgICAgICAgIHNlID0gRkFMU0UsCiAgICAgICAgICAgICAgZm9ybXVsYSA9IHkgfiAwICsgSShQb2lzX0V4cCh4IC8gMTAwKSkgKyB4KSArCiAgZ2VvbV9wb2ludChkYXRhID0gS1A2ICU+JSBmaWx0ZXIoU3RyYWluICVpbiUgYygiQWxsIEdGSEs5OSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEIyICsgUEIxICsgUEEgKyBOUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEEgKyBOQSArIE0gKyBOUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uZSwgYWxsIE1hTU45OSIpKSwKICAgICAgICAgICAgIGFlcyh4ID0gRXhwcmVzc2luZ19IQSwKICAgICAgICAgICAgICAgICB5ID0gRHVhbF9IQSwKICAgICAgICAgICAgICAgICBjb2xvciA9IFN0cmFpbikpICsKICBsYWJzKHggPSAgZXhwcmVzc2lvbihib2xkKCIlIGNlbGxzIEhBIl4iKyIpKSwKICAgICAgIHkgPSAgZXhwcmVzc2lvbihib2xkKCIlIGNlbGxzIGR1YWwtSEEiXiIrIikpLAogICAgICAgY29sb3IgPSAiV0YxMCBzZWdtZW50cyIsCiAgICAgICBmaWxsID0gIldGMTAgc2VnbWVudHMiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoMCwyNSw1MCw3NSwxMDApKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IGMoMCwyNSw1MCw3NSwxMDApKSArCiAgY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKDAsMTAwKSwgeWxpbSA9IGMoMCwxMDApKQoKZ2dzYXZlKCdQbG90cy8zQl80XzRfSEFfQ29fRXhwcmVzc2lvbi5wZGYnLAogICAgICAgd2lkdGggPSA0LAogICAgICAgaGVpZ2h0ID0gNCwKICAgICAgIHVuaXQgPSAiaW4iKQoKIyAzRDogSEEgY28tZXhwcmVzc2lvbiBieSAxOjcgY2hpbWVyYXMKCkJhc2UuUGxvdCArCiAgZ2VvbV9hYmxpbmUoc2xvcGUgPSAxLAogICAgICAgICAgICAgIGNvbG9yID0gImRpbWdyYXkiLAogICAgICAgICAgICAgIGx0eSA9IDMsCiAgICAgICAgICAgICAgbHdkID0gMSkgKwogIGdlb21fbGluZShkYXRhID0gRXhwX0R1YWxfSEEgLCAKICAgICAgICAgICAgYWVzKHggPSBwSEEgKiAxMDAsIAogICAgICAgICAgICAgICAgeSA9IHBEdWFsICogMTAwKSwgCiAgICAgICAgICAgIGNvbG9yID0gImRpbWdyYXkiLAogICAgICAgICAgICBsdHkgPSAyLCAKICAgICAgICAgICAgbHdkID0gMSkgKwogIGFubm90YXRlKCJ0ZXh0Iix4ID0gODAsIHkgPSA5NSxzaXplID0gNixsYWJlbCA9IFRlWCgiXFx0ZXh0YmZ7eCA9IHl9IiksIGNvbG9yID0gImRpbWdyYXkiKSArCiAgYW5ub3RhdGUoInRleHQiLHggPSA4MCwgeSA9IDUsc2l6ZSA9IDYsbGFiZWwgPSBUZVgoIlxcdGV4dGJme1ByZWRpY3Rpb259IiksIGNvbG9yID0gImRpbWdyYXkiKSArCiAgZ2VvbV9zbW9vdGgoZGF0YSA9IEtQNiAlPiUgZmlsdGVyKFN0cmFpbiAlaW4lIGMoIkFsbCBHRkhLOTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQjIiLCAiUEIxIiwgIlBBIiwgIk5QIiwiSEEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb25lLCBhbGwgTWFNTjk5IikpLAogICAgICAgICAgICAgIGFlcyh4ID0gRXhwcmVzc2luZ19IQSwKICAgICAgICAgICAgICAgICAgeSA9IER1YWxfSEEsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gU3RyYWluLAogICAgICAgICAgICAgICAgICBmaWxsID0gU3RyYWluKSwKICAgICAgICAgICAgICBtZXRob2QgPSAicmxtIiwKICAgICAgICAgICAgICBzZSA9IEZBTFNFLAogICAgICAgICAgICAgIGZvcm11bGEgPSB5IH4gMCArIEkoUG9pc19FeHAoeCAvIDEwMCkpICsgeCkgKwogIGdlb21fcG9pbnQoZGF0YSA9IEtQNiAlPiUgZmlsdGVyKFN0cmFpbiAlaW4lIGMoIkFsbCBHRkhLOTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBCMiIsICJQQjEiLCAiUEEiLCAiTlAiLCJIQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uZSwgYWxsIE1hTU45OSIpKSwKICAgICAgICAgICAgIGFlcyh4ID0gRXhwcmVzc2luZ19IQSwKICAgICAgICAgICAgICAgICB5ID0gRHVhbF9IQSwKICAgICAgICAgICAgICAgICBjb2xvciA9IFN0cmFpbikpICsKICBsYWJzKHggPSAgZXhwcmVzc2lvbihib2xkKCIlIGNlbGxzIEhBIl4iKyIpKSwKICAgICAgIHkgPSAgZXhwcmVzc2lvbihib2xkKCIlIGNlbGxzIGR1YWwtSEEiXiIrIikpLAogICAgICAgY29sb3IgPSAiV0YxMCBzZWdtZW50cyIsCiAgICAgICBmaWxsID0gIldGMTAgc2VnbWVudHMiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoMCwyNSw1MCw3NSwxMDApKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IGMoMCwyNSw1MCw3NSwxMDApKSArCiAgY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKDAsMTAwKSwgeWxpbSA9IGMoMCwxMDApKQoKZ2dzYXZlKCdQbG90cy8zRF8xXzdfSEFfQ29fRXhwcmVzc2lvbi5wZGYnLAogICAgICAgd2lkdGggPSA0LAogICAgICAgaGVpZ2h0ID0gNCwKICAgICAgIHVuaXQgPSAiaW4iKQoKTGVnZW5kLjNBID0gZ2dwbG90KCkgKwogIGdlb21fc21vb3RoKGRhdGEgPSBLUDYsCiAgICAgICAgICAgICAgYWVzKHggPSBFeHByZXNzaW5nX0hBLAogICAgICAgICAgICAgICAgICB5ID0gRHVhbF9IQSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSBTdHJhaW4sCiAgICAgICAgICAgICAgICAgIGZpbGwgPSBTdHJhaW4pLAogICAgICAgICAgICAgIG1ldGhvZCA9ICJybG0iLAogICAgICAgICAgICAgIHNlID0gRkFMU0UsCiAgICAgICAgICAgICAgZm9ybXVsYSA9IHkgfiAwICsgSShQb2lzX0V4cCh4IC8gMTAwKSkgKyB4KSArCiAgZ2VvbV9wb2ludChkYXRhID0gS1A2LAogICAgICAgICAgICAgYWVzKHggPSBFeHByZXNzaW5nX0hBLAogICAgICAgICAgICAgICAgIHkgPSBEdWFsX0hBLAogICAgICAgICAgICAgICAgIGNvbG9yID0gU3RyYWluKSkgKwogIGxhYnMoeCA9ICBleHByZXNzaW9uKGJvbGQoIiUgY2VsbHMgSEEiXiIrIikpLAogICAgICAgeSA9ICBleHByZXNzaW9uKGJvbGQoIiUgY2VsbHMgZHVhbC1IQSJeIisiKSksCiAgICAgICBjb2xvciA9ICJHRkhLOTkgc2VnbWVudHMiLAogICAgICAgZmlsbCA9ICJHRkhLOTkgc2VnbWVudHMiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoMCwyNSw1MCw3NSwxMDApKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IGMoMCwyNSw1MCw3NSwxMDApKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIkFsbCBHRkhLOTkiID0gImZpcmVicmljazMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQjIgKyBQQjEgKyBQQSArIE5QIiA9ICJvcmFuZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQjIiID0gImRhcmtvcmNoaWQxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEIxIiA9ICJncmVlbjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQSIgPSAiZ29sZGVucm9kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTlAiID0gIm5hdnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQSIgPSAic3RlZWxibHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEEgKyBOQSArIE0gKyBOUyIgPSAiZGVlcHNreWJsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb25lLCBhbGwgTWFNTjk5IiA9ICJibGFjayIpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiQWxsIEdGSEs5OSIgPSAiZmlyZWJyaWNrMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBCMiArIFBCMSArIFBBICsgTlAiID0gIm9yYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBCMiIgPSAiZGFya29yY2hpZDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQjEiID0gImdyZWVuMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBBIiA9ICJnb2xkZW5yb2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOUCIgPSAibmF2eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBIiA9ICJzdGVlbGJsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQSArIE5BICsgTSArIE5TIiA9ICJkZWVwc2t5Ymx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbmUsIGFsbCBNYU1OOTkiID0gImJsYWNrIikpICsKICBjb29yZF9jYXJ0ZXNpYW4oeGxpbSA9IGMoMCwxMDApLCB5bGltID0gYygwLDEwMCkpICsKICB0aGVtZSh0ZXh0PWVsZW1lbnRfdGV4dChzaXplPTE0LGZhY2U9ImJvbGQiKSwKICAgICAgICBzdHJpcC50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksbWFyZ2luPW1hcmdpbigwLDAsMywwKSksCiAgICAgICAgc3RyaXAudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLG1hcmdpbj1tYXJnaW4oMCwwLDAsMCksYW5nbGU9MCksCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSkpLAogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT0wLHZqdXN0PTAsc2l6ZT1yZWwoMS41KSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgYXhpcy5saW5lLnggPSBlbGVtZW50X2xpbmUoc2l6ZT0wLjUpLAogICAgICAgIGF4aXMubGluZS55ID0gZWxlbWVudF9saW5lKHNpemU9MC41KSwKICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2xpbmUoc2l6ZT0wLjUpLAogICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfbGluZShzaXplID0gMC41KSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS4yKSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjIpKSwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSkKCmdnc2F2ZShnX2xlZ2VuZChMZWdlbmQuM0EpLAogICAgICAgZmlsZSA9ICJQbG90cy9MZWdlbmRfM0EucGRmIiwKICAgICAgIGhlaWdodCA9IDQsCiAgICAgICB3aWR0aCA9IDIsCiAgICAgICB1bml0cyA9ICJpbiIpCgojIDNEOiAlIGxpbmVhcml0eSBvZiBIQSBjby1leHByZXNzaW9uIC0tLS0KCm0yID0gbG0oZm9ybXVsYSA9IER1YWxfSEEgfiAwICsgU3RyYWluOkhBXzIgKyBTdHJhaW46SEEsCiAgICAgICAgZGF0YSA9IEtQNiAlPiUgbXV0YXRlKER1YWxfSEEgPSBEdWFsX0hBIC8gMTAwLCBIQSA9IEV4cHJlc3NpbmdfSEEgLyAxMDAsIEhBXzIgPSBQb2lzX0V4cChIQSkpKSAlPiUgc3VtbWFyeQpzMiA9IGNvZWZmaWNpZW50cyhtMikKCmRmMiA9IG1hdHJpeChucm93ID0gbGVuZ3RoKGxldmVscyhLUDYkU3RyYWluKSksCiAgICAgICAgICAgICBuY29sID0gMywKICAgICAgICAgICAgIGRhdGEgPSAwKQpkZjJbLDFdID0gKG5hbWVzKHMyWywxXSkgJT4lIHN0cl9yZXBsYWNlKCJTdHJhaW4iLCIiKSAlPiUgc3RyX3JlcGxhY2UoIjpIQSIsIiIpICU+JSBzdHJfcmVwbGFjZSgiXzIiLCIiKSlbMTpsZW5ndGgobGV2ZWxzKEtQNiRTdHJhaW4pKV0KZGYyWywyXSA9IGFzLm51bWVyaWMoczJbMTpsZW5ndGgobGV2ZWxzKEtQNiRTdHJhaW4pKSwxXSkKZGYyWywzXSA9IGFzLm51bWVyaWMoczJbKDEgKyBsZW5ndGgobGV2ZWxzKEtQNiRTdHJhaW4pKSk6KGxlbmd0aChsZXZlbHMoS1A2JFN0cmFpbikpICogMiksMV0pCmRmMiA9IGRmMiAlPiUgZGF0YS5mcmFtZQpjb2xuYW1lcyhkZjIpID0gYygiU3RyYWluIiwiUG9pcyIsIkxpbmVhciIpCgpkZjMgPSBkZjIgJT4lCiAgbXV0YXRlKFBvaXMgPSBQb2lzICU+JSBhcy5jaGFyYWN0ZXIgJT4lIGFzLm51bWVyaWMsCiAgICAgICAgIExpbmVhciA9IExpbmVhciAlPiUgYXMuY2hhcmFjdGVyICU+JSBhcy5udW1lcmljLAogICAgICAgICBQb2lzX1JlbCA9IGFicyhQb2lzKSAvIChhYnMoUG9pcykgKyBhYnMoTGluZWFyKSksCiAgICAgICAgIExpbl9SZWwgPSBhYnMoTGluZWFyKSAvIChhYnMoUG9pcykgKyBhYnMoTGluZWFyKSksCiAgICAgICAgIFBlcmNfV0YxMF9MaW4gPSAoTGluZWFyIC0gbWluKExpbmVhcikpIC8gbWF4KExpbmVhciAtIG1pbihMaW5lYXIpKSwKICAgICAgICAgUGVyY19NTjk5X1BvaXMgPSAoUG9pcyAtIG1pbihQb2lzKSkgLyBtYXgoUG9pcyAtIG1pbihQb2lzKSksCiAgICAgICAgIFN0cmFpbiA9IGZhY3RvcihTdHJhaW4sIGxldmVscyA9IGMoIkFsbCBHRkhLOTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQjIgKyBQQjEgKyBQQSArIE5QIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEIyIiwgIlBCMSIsIlBBIiwiTlAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQSArIE5BICsgTSArIE5TIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEEiLCJOb25lLCBhbGwgTWFNTjk5IikgJT4lIHJldikpCgpCYXNlLlBsb3QgKwogIGdlb21fYmFyKGRhdGEgPSBkZjMsCiAgICAgICAgICAgYWVzKHggPSBTdHJhaW4sCiAgICAgICAgICAgICAgIHkgPSBMaW5fUmVsICogMTAwLAogICAgICAgICAgICAgICBmaWxsID0gU3RyYWluKSwKICAgICAgICAgICBjb2xvciA9ICJibGFjayIsCiAgICAgICAgICAgc3RhdCA9ICJpZGVudGl0eSIpICsgCiAgbGFicyh5ID0gIiUgbGluZWFyaXR5IiwKICAgICAgIHggPSAiR0ZISzk5IHNlZ21lbnRzIikgKwogIGNvb3JkX2ZsaXAoeWxpbSA9IGMoMCwxMDApKQoKZ2dzYXZlKCdQbG90cy8zR19QZXJjZW50X0xpbmVhci5wZGYnLAogICAgICAgd2lkdGggPSA2LAogICAgICAgaGVpZ2h0ID0gNCwKICAgICAgIHVuaXQgPSAiaW4iKQoKIyAzRTogQ2x1c3RlcmluZyAtLS0tCgpXRjEwLlNlZ21lbnRzID0gZGYyJFN0cmFpbgpkZjIkUmVhc3NvcnRtZW50X2IwID0gczFbMTo5XQpkZjIkUmVhc3NvcnRtZW50X2IxID0gczFbMTA6MThdCgpkZjQgPSBkZjJbLDI6NV0gJT4lIGFzLm1hdHJpeCAlPiUgYXMubnVtZXJpYyAlPiUgbWF0cml4KG5yb3cgPSA5KSAlPiUgc2NhbGUKCnJvd25hbWVzKGRmNCkgPSBkZjIkU3RyYWluCmQgPSBkaXN0KGRmNCwgbWV0aG9kID0gImV1Y2xpZGVhbiIsIGRpYWcgPSBUUlVFKSAlPiUgYXMubWF0cml4Cgpjb2xuYW1lcyhkKSA9IFdGMTAuU2VnbWVudHMKcm93bmFtZXMoZCkgPSBXRjEwLlNlZ21lbnRzCnJlc3VsdCA9IHB2Y2x1c3QoZCwgbWV0aG9kLmhjbHVzdCA9ICJ3YXJkIiwKICAgICAgICBtZXRob2QuZGlzdCA9ICJjb3JyZWxhdGlvbiIpCgpnZ2QxID0gcmVzdWx0ICU+JSBhcy5kZW5kcm9ncmFtICU+JQogIHNvcnQodHlwZSA9ICJsYWJlbHMiLCBkZWNyZWFzaW5nID0gVFJVRSkgJT4lCiAgZGVuZGV4dGVuZDo6c2V0KCJsYWJlbHNfY2V4IiwuOCkgJT4lCiAgZGVuZGV4dGVuZDo6c2V0KCJsZWF2ZXNfcGNoIiwxNikgJT4lCiAgYXMuZ2dkZW5kCgpOb2RlLkJQID0gY2JpbmQocmVzdWx0JGhjbHVzdCRoZWlnaHQscmVzdWx0JGVkZ2VzJGF1LCByZXN1bHQkZWRnZXMkYnApICU+JSBkYXRhLmZyYW1lCmNvbG5hbWVzKE5vZGUuQlApID0gYygieSIsImF1IiwiYnAiKQoKTm9kZS5TdXBwb3J0ID0gZnVsbF9qb2luKGdnZDEkbm9kZXMgJT4lIGZpbHRlcih5ID4gMCksTm9kZS5CUCkgJT4lCiAgZHBseXI6Om11dGF0ZShBVSA9IChhdSAqIDEwMCkgJT4lIHJvdW5kKDApICU+JSBhcy5jaGFyYWN0ZXIpCmdnZDEkbGFiZWxzJHkgPSBnZ2QxJGxhYmVscyR5IC0gMC4zCgpDbHVzdGVycyA9IGN1dHJlZShyZXN1bHQgJT4lIGFzLmRlbmRyb2dyYW0gJT4lCiAgICAgICAgIHNvcnQodHlwZSA9ICJsYWJlbHMiLCBkZWNyZWFzaW5nID0gVFJVRSksCiAgICAgICBrID0gMikgJT4lIHJldgoKQ2x1c3RlcnMgPSBjYmluZChuYW1lcyhDbHVzdGVycyksQ2x1c3RlcnMpICU+JSBkYXRhLmZyYW1lCmNvbG5hbWVzKENsdXN0ZXJzKSA9IGMoImxhYmVsIiwiY2x1c3RlciIpCmdnZDEkbGFiZWxzID0gcmlnaHRfam9pbihnZ2QxJGxhYmVscyxDbHVzdGVycykKCmNvbG9ycy5kZiA9IGNiaW5kKFdGMTAuU2VnbWVudHMgJT4lIGFzLmNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgYygiZmlyZWJyaWNrMyIsICJvcmFuZ2UiLCJkYXJrb3JjaGlkMSIsImdyZWVuMyIsImdvbGRlbnJvZCIsCiAgICAgICAgICAgICAgICAgICAgIm5hdnkiLCJkZWVwc2t5Ymx1ZSIsInN0ZWVsYmx1ZSIsImJsYWNrIikpICU+JSBkYXRhLmZyYW1lCmNvbG5hbWVzKGNvbG9ycy5kZikgPSBjKCJsYWJlbCIsImNvbCIpCgpnZ2QxJGxhYmVscyA9IHJpZ2h0X2pvaW4oZ2dkMSRsYWJlbHMgJT4lIGRwbHlyOjpzZWxlY3QoLWNvbCksY29sb3JzLmRmKQpnZ2QxJG5vZGVzID0gcmlnaHRfam9pbihnZ2QxJG5vZGVzICU+JSBmaWx0ZXIoeSA9PSAwKSAlPiUgZHBseXI6OnNlbGVjdCgtY29sLC1jZXgpLGdnZDEkbGFiZWxzICU+JSBkcGx5cjo6c2VsZWN0KHgsbGFiZWwsY29sKSkKZ2dkMSRub2RlcyRjZXggPSAzCmdnZDEkbm9kZXMkY29sID0gZ2dkMSRub2RlcyRjb2wgJT4lIGFzLmNoYXJhY3RlcgpSZWN0X3htaW4gPSBnZ2QxJGxhYmVscyAlPiUKICBncm91cF9ieShjbHVzdGVyKSAlPiUgZHBseXI6OnN1bW1hcmlzZSh4bWluID0gbWluKHgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1heCA9IG1heCh4KSkKeG1pbiA9IG1pbihjKGdnZDEkc2VnbWVudHMkeCxnZ2QxJHNlZ21lbnRzJHhlbmQpKQp4bWF4ID0gbWF4KGMoZ2dkMSRzZWdtZW50cyR4LGdnZDEkc2VnbWVudHMkeGVuZCkpCnltaW4gPSBtaW4oYyhnZ2QxJHNlZ21lbnRzJHksZ2dkMSRzZWdtZW50cyR5ZW5kKSkKeW1heCA9IG1heChjKGdnZDEkc2VnbWVudHMkeSxnZ2QxJHNlZ21lbnRzJHllbmQpKQpSZWN0X3ltYXggPSByZXYoc29ydChnZ2QxJG5vZGVzJHkpKVsyXQpSZWN0X3ltaW4gPSB5bWluCgpnZ2QxJG5vZGVzJHBjaCA9IE5BCmdnZDEkbm9kZXMkZmlsbCA9IGdnZDEkbm9kZXMkY29sCgpnZ3Bsb3QoZ2dkMSwgaG9yaXogPSBUUlVFKSArIHRoZW1lX2RlbmRybygpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiwgZmFjZSA9ICJib2xkIikpICsKICAgIGNvb3JkX2ZsaXAoeGxpbSA9IGMoeG1pbix4bWF4KSwKICAgICAgICAgICAgICAgeWxpbSA9IGMoeW1pbiAtIDUseW1heCkpICsKICBnZW9tX3BvaW50KGRhdGEgPSBOb2RlLlN1cHBvcnQgJT4lIGZpbHRlcihhdSA+PSAwLjk1KSwKICAgICAgICAgICAgIGFlcyh4ID0geCwKICAgICAgICAgICAgICAgICB5ID0geSksCiAgICAgICAgICAgICBwY2ggPSAyMSwKICAgICAgICAgICAgIHN0cm9rZSA9IDEsCiAgICAgICAgICAgICBmaWxsID0gInllbGxvdyIsCiAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsCiAgICAgICAgICAgICBzaXplID0gMikgKwogIGdlb21fcG9pbnQoZGF0YSA9IGdnZDEkbm9kZXMsIGFlcyh4ID0geCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBsYWJlbCksCiAgICAgICAgICAgICBzaXplID0gMywKICAgICAgICAgICAgIHN0cm9rZSA9IDEsCiAgICAgICAgICAgICBwY2ggPSAyMSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIkFsbCBHRkhLOTkiID0gImZpcmVicmljazMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBCMiArIFBCMSArIFBBICsgTlAiID0gIm9yYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEIyIiA9ICJkYXJrb3JjaGlkMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEIxIiA9ICJncmVlbjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBBIiA9ICJnb2xkZW5yb2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5QIiA9ICJuYXZ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQSIgPSAic3RlZWxibHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQSArIE5BICsgTSArIE5TIiA9ICJkZWVwc2t5Ymx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uZSwgYWxsIE1hTU45OSIgPSAiYmxhY2siKSwKICAgICAgICAgICAgICAgICAgICBndWlkZSA9IEZBTFNFKSArCgogIGdlb21fcmVjdChkYXRhID0gUmVjdF94bWluLAogICAgICAgICAgICBhZXMoeG1pbiA9IHhtaW4gLSAwLjMsCiAgICAgICAgICAgIHhtYXggPSB4bWF4ICsgMC4zKSwKICAgICAgICAgICAgeW1pbiA9IFJlY3RfeW1pbiAtIDIsCiAgICAgICAgICAgIHltYXggPSBSZWN0X3ltYXggKyA2LjUsCiAgICAgICAgICAgIGZpbGwgPSBOQSwKICAgICAgICAgICAgY29sb3IgPSAiZGltZ3JheSIsCiAgICAgICAgICAgIGx3ZCA9IDEuMiwKICAgICAgICAgICAgbHR5ID0gOCkKCmdnc2F2ZShmaWxlID0gIlBsb3RzLzNFX0NsdXN0ZXIucGRmIiwKICAgICAgIGhlaWdodCA9IDQsCiAgICAgICB3aWR0aCA9IDQsCiAgICAgICB1bml0cyA9ICJpbiIpCgoKYGBgCgpgYGB7ciBGaWd1cmUgNH0KCmRmMSA9IHJlYWQuY3N2KGZpbGUgPSBmaWxlLnBhdGgoUHJvai5Ib21lLCJEYXRhIiwiNEFfRGF0YS5jc3YiKSwgaGVhZGVyID0gVFJVRSkgJT4lCiAgbXV0YXRlKFZpcnVzX0NlbGwgPSBzdHJfYyhWaXJ1cywiIGluICIsIENlbGwpKQoKQmFzZWxpbmUuZGYgPSBkZjEgJT4lIAogIGZpbHRlcihNT0kgPT0gMCkgJT4lCiAgZ3JvdXBfYnkoVmlydXNfQ2VsbCkgJT4lCiAgZHBseXI6OnN1bW1hcmlzZShCYXNlID0gbWVhbihDb3B5KSkKCmRmMiA9IHJpZ2h0X2pvaW4oZGYxLEJhc2VsaW5lLmRmKSAlPiUKICBtdXRhdGUoRm9sZCA9IENvcHkgLyBCYXNlKQoKZGYzID0gZGYyICU+JSAKICBncm91cF9ieShWaXJ1c19DZWxsLE1PSSkgJT4lCiAgZHBseXI6OnN1bW1hcmlzZShGb2xkID0gbWVhbihGb2xkKSkgJT4lCiAgZmlsdGVyKEZvbGQgPT0gbWF4KEZvbGQpKQoKZGY0ID0gZGYyICU+JQogIG11dGF0ZShNT0kgPSBmYWN0b3IoTU9JKSkgJT4lCiAgZ3JvdXBfYnkoVmlydXMsIENlbGwsIFZpcnVzX0NlbGwsIE1PSSkgJT4lCiAgZHBseXI6OnN1bW1hcmlzZShGb2xkLkF2ZyA9IG1lYW4oRm9sZCksCiAgICAgICAgICAgICAgICAgICBGb2xkLnNlID0gc2QoRm9sZCkgLyBzcXJ0KGxlbmd0aChGb2xkKSkpCgpCYXNlLlBsb3QgPSAKICBnZ3Bsb3QoKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIkdGSEs5OSBpbiBNRENLIiA9ICJza3libHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR0ZISzk5IGluIERGLTEiID0gImRlZXBwaW5rMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdGSEs5OSBpbiBIVEJFIiA9ICJzdGVlbGJsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOTDA5IGluIE1EQ0siID0gImdvbGRlbnJvZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5MMDkgaW4gSFRCRSIgPSAicHVycGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFNTjk5IGluIE1EQ0siID0gImdyZWVuMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hTU45OSBpbiBERSIgPSAiZmlyZWJyaWNrMyIpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiR0ZISzk5IGluIE1EQ0siID0gInNreWJsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdGSEs5OSBpbiBERi0xIiA9ICJkZWVwcGluazMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdGSEs5OSBpbiBIVEJFIiA9ICJzdGVlbGJsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5MMDkgaW4gTURDSyIgPSAiZ29sZGVucm9kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOTDA5IGluIEhUQkUiID0gInB1cnBsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFNTjk5IGluIE1EQ0siID0gImdyZWVuMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFNTjk5IGluIERFIiA9ICJmaXJlYnJpY2szIikpICsKICB0aGVtZSh0ZXh0PWVsZW1lbnRfdGV4dChzaXplPTE0LGZhY2U9ImJvbGQiKSwKICAgICAgICBzdHJpcC50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksbWFyZ2luPW1hcmdpbigwLDAsMywwKSksCiAgICAgICAgc3RyaXAudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLG1hcmdpbj1tYXJnaW4oMCwwLDAsMCksYW5nbGU9MCksCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSkpLAogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT0wLHZqdXN0PTAsc2l6ZT1yZWwoMS41KSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgYXhpcy5saW5lLnggPSBlbGVtZW50X2xpbmUoc2l6ZT0wLjUpLAogICAgICAgIGF4aXMubGluZS55ID0gZWxlbWVudF9saW5lKHNpemU9MC41KSwKICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2xpbmUoc2l6ZT0wLjUpLAogICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfbGluZShzaXplID0gMC41KSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS4yKSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjIpKSwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiTkEiKQoKQmFzZS5QbG90ICsKICBnZW9tX2hsaW5lKGx0eSA9IDIsIHlpbnRlcmNlcHQgPSAxKSArCiAgZ2VvbV9jb2woZGF0YSA9IGRmNCAlPiUgZmlsdGVyKE1PSSAhPSAiMCIsIFZpcnVzID09ICJHRkhLOTkiLCBDZWxsICE9ICJIVEJFIiksCiAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgpLAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICBhZXMoeCA9IE1PSSwKICAgICAgICAgICAgICAgeSA9IEZvbGQuQXZnLAogICAgICAgICAgICAgICBmaWxsID0gVmlydXNfQ2VsbCkpICsKICBnZW9tX2Vycm9yYmFyKGRhdGEgPSBkZjQgJT4lIGZpbHRlcihNT0kgIT0gIjAiLCBWaXJ1cyA9PSAiR0ZISzk5IiwgQ2VsbCAhPSAiSFRCRSIpLAogICAgICAgICAgICAgICAgYWVzKHggPSBNT0ksCiAgICAgICAgICAgICAgICAgICAgeW1pbiA9IEZvbGQuQXZnIC0gRm9sZC5zZSwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gRm9sZC5BdmcgKyBGb2xkLnNlKSwKICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHBhZGRpbmcgPSAwLjUpLAogICAgICAgICAgICAgICAgd2lkdGggPSAwLjksCiAgICAgICAgICAgICAgICBsd2QgPSAwLjgpICsKICBnZW9tX2ppdHRlcihkYXRhID0gZGYyICU+JSBmaWx0ZXIoTU9JICE9ICIwIiwgVmlydXMgPT0gIkdGSEs5OSIsIENlbGwgIT0gIkhUQkUiKSwKICAgICAgICAgICBhZXMoeCA9IE1PSSAlPiUgZmFjdG9yLAogICAgICAgICAgICAgICB5ID0gRm9sZCwKICAgICAgICAgICAgICAgZmlsbCA9IFZpcnVzX0NlbGwpLAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMigwLjkpLAogICAgICAgICAgIHN0cm9rZSA9IDEsCiAgICAgICAgICAgcGNoID0gMjEpICsKICBzY2FsZV95X2xvZzEwKGJyZWFrcyA9IGMoLjEsIDEsIDEwLCAxMDApKSArCiAgbGFicyh4ID0gIkhlbHBlciB2aXJ1cyBNT0kgKFBGVS9jZWxsKSIsCiAgICAgICB5ID0gIkZvbGQgY2hhbmdlIHJlbGF0aXZlIHRvIFdUIG9ubHkiKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKC4xLDEwMCkpCgpnZ3NhdmUoZmlsZSA9ICJQbG90cy80QV9IZWxwX0dGSEs5OV9CYXIucGRmIiwKICAgICAgIGhlaWdodCA9IDUsCiAgICAgICB3aWR0aCA9IDUsCiAgICAgICB1bml0cyA9ICJpbiIpCgpvcHRpb25zKHNjaXBlbiA9IDk5OSkKCkJhc2UuUGxvdCArCiAgZ2VvbV9obGluZShsdHkgPSAyLCB5aW50ZXJjZXB0ID0gMSkgKwogIGdlb21fY29sKGRhdGEgPSBkZjQgJT4lIGZpbHRlcihNT0kgIT0gIjAiLCBWaXJ1cyA9PSAiTkwwOSIsIENlbGwgIT0gIkhUQkUiKSwKICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKCksCiAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgIGFlcyh4ID0gTU9JLAogICAgICAgICAgICAgICB5ID0gRm9sZC5BdmcsCiAgICAgICAgICAgICAgIGZpbGwgPSBWaXJ1c19DZWxsKSkgKwogIGdlb21fZXJyb3JiYXIoZGF0YSA9IGRmNCAlPiUgZmlsdGVyKE1PSSAhPSAiMCIsIFZpcnVzID09ICJOTDA5IiwgQ2VsbCAhPSAiSFRCRSIpLAogICAgICAgICAgICAgICAgYWVzKHggPSBNT0ksCiAgICAgICAgICAgICAgICAgICAgeW1pbiA9IEZvbGQuQXZnIC0gRm9sZC5zZSwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gRm9sZC5BdmcgKyBGb2xkLnNlKSwKICAgICAgICAgICAgICAgICNwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMihwYWRkaW5nID0gMC4xKSwKICAgICAgICAgICAgICAgIHdpZHRoID0gMC40LAogICAgICAgICAgICAgICAgbHdkID0gMC44KSArCiAgZ2VvbV9qaXR0ZXIoZGF0YSA9IGRmMiAlPiUgZmlsdGVyKE1PSSAhPSAiMCIsIFZpcnVzID09ICJOTDA5IiwgQ2VsbCAhPSAiSFRCRSIpLAogICAgICAgICAgICAgIGFlcyh4ID0gTU9JICU+JSBmYWN0b3IsCiAgICAgICAgICAgICAgICAgIHkgPSBGb2xkLAogICAgICAgICAgICAgICAgICBmaWxsID0gVmlydXNfQ2VsbCksCiAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgICAgICNwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuMSksCiAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIoMC45KSwKICAgICAgICAgICAgICBzdHJva2UgPSAxLAogICAgICAgICAgICAgIHBjaCA9IDIxKSArCiAgc2NhbGVfeV9sb2cxMChicmVha3MgPSBjKC4wMDEsIDAuMDEsIC4xLCAxLCAxMCwgMTAwKSkgKwogIGxhYnMoeCA9ICJIZWxwZXIgdmlydXMgTU9JIChQRlUvY2VsbCkiLAogICAgICAgeSA9ICJGb2xkIGNoYW5nZSByZWxhdGl2ZSB0byBXVCBvbmx5IikgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYyguMDAxLDEpKQoKZ2dzYXZlKGZpbGUgPSAiUGxvdHMvNENfSGVscF9OTDA5X0Jhci5wZGYiLAogICAgICAgaGVpZ2h0ID0gNSwKICAgICAgIHdpZHRoID0gNSwKICAgICAgIHVuaXRzID0gImluIikKCm9wdGlvbnMoc2NpcGVuID0gOTk5KQpCYXNlLlBsb3QgKwogIGdlb21faGxpbmUobHR5ID0gMiwgeWludGVyY2VwdCA9IDEpICsKICBnZW9tX2ppdHRlcihkYXRhID0gZGYyICU+JSBmaWx0ZXIoTU9JID4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9sZCA+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnVzID09ICJNYU1OOTkiKSwKICAgICAgICAgICAgICBhZXMoeCA9IE1PSSwKICAgICAgICAgICAgICAgICAgeSA9IEZvbGQsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gVmlydXNfQ2VsbCksCiAgICAgICAgICAgICAgd2lkdGggPSAwLjA1KSArCiAgZ2VvbV9zbW9vdGgoZGF0YSA9IGRmMiAlPiUgZmlsdGVyKE1PSSA+IDAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZWxsID09ICJERSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnVzID09ICJNYU1OOTkiKSwKICAgICAgICAgICAgICBhZXMoeCA9IE1PSSwKICAgICAgICAgICAgICAgICAgeSA9IEZvbGQsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gVmlydXNfQ2VsbCwKICAgICAgICAgICAgICAgICAgZmlsbCA9IFZpcnVzX0NlbGwpKSArCiAgc2NhbGVfeF9sb2cxMCgpICsKICBzY2FsZV95X2xvZzEwKGJyZWFrcyA9IGMoMTAwLDEsLjAxKSkgKwogIGxhYnMoeCA9ICJIZWxwZXIgdmlydXMgTU9JIChQRlUvY2VsbCkiLAogICAgICAgeSA9ICJGb2xkIGNoYW5nZSByZWxhdGl2ZSB0byBXVCBvbmx5IikgKwogIGNvb3JkX2NhcnRlc2lhbih4bGltID0gYyguMDEsNSksCiAgICAgICAgICAgICAgICAgIHlsaW0gPSBjKDFlLTQsMykpCgpCYXNlLlBsb3QgKwogIGdlb21faGxpbmUobHR5ID0gMiwgeWludGVyY2VwdCA9IDEpICsKICBnZW9tX2NvbChkYXRhID0gZGY0ICU+JQogICAgICAgICAgICAgbXV0YXRlKEZvbGQuQXZnID0gRm9sZC5BdmcgJT4lIG5hX2lmKDApKSAlPiUKICAgICAgICAgICAgICNtdXRhdGUoRm9sZC5BdmcgPSBGb2xkLkF2ZyArIDEgKiAoRm9sZC5BdmcgPT0gMCkpICU+JQogICAgICAgICAgICAgZmlsdGVyKE1PSSAhPSAiMCIsIFZpcnVzID09ICJNYU1OOTkiLCBDZWxsICE9ICJIVEJFIiksCiAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgpLAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICBhZXMoeCA9IE1PSSwKICAgICAgICAgICAgICAgeSA9IEZvbGQuQXZnLAogICAgICAgICAgICAgICBmaWxsID0gVmlydXNfQ2VsbCkpICsKICBnZW9tX2Vycm9yYmFyKGRhdGEgPSBkZjQgJT4lCiAgICAgICAgICAgICAgICAgICNtdXRhdGUoRm9sZC5BdmcgPSBGb2xkLkF2ZyArIDEgKiAoRm9sZC5BdmcgPT0gMCkpICU+JQogICAgICAgICAgICAgICAgICBtdXRhdGUoRm9sZC5BdmcgPSBGb2xkLkF2ZyAlPiUgbmFfaWYoMCkpICU+JQogICAgICAgICAgICAgICAgICBmaWx0ZXIoTU9JICE9ICIwIiwgVmlydXMgPT0gIk1hTU45OSIsIENlbGwgIT0gIkhUQkUiKSwKICAgICAgICAgICAgICAgIGFlcyh4ID0gTU9JLAogICAgICAgICAgICAgICAgICAgIHltaW4gPSBGb2xkLkF2ZyAtIEZvbGQuc2UsCiAgICAgICAgICAgICAgICAgICAgeW1heCA9IEZvbGQuQXZnICsgRm9sZC5zZSksCiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMihwYWRkaW5nID0gMC41KSwKICAgICAgICAgICAgICAgIHdpZHRoID0gMC45LAogICAgICAgICAgICAgICAgbHdkID0gMC44KSArCiAgZ2VvbV9qaXR0ZXIoZGF0YSA9IGRmMiAlPiUgCiAgICAgICAgICAgICAgICAjbXV0YXRlKEZvbGQgPSBGb2xkICU+JSBuYV9pZigwKSkgJT4lCiAgICAgICAgICAgICAgICBmaWx0ZXIoTU9JICE9ICIwIiwgVmlydXMgPT0gIk1hTU45OSIsIENlbGwgIT0gIkhUQkUiKSwKICAgICAgICAgICAgICBhZXMoeCA9IE1PSSAlPiUgZmFjdG9yLAogICAgICAgICAgICAgICAgICB5ID0gRm9sZCwKICAgICAgICAgICAgICAgICAgZmlsbCA9IFZpcnVzX0NlbGwpLAogICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICAgICAjcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjEpLAogICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHdpZHRoID0gMC45LCBwYWRkaW5nID0gMC4yKSwKICAgICAgICAgICAgICBzdHJva2UgPSAxLAogICAgICAgICAgICAgIHBjaCA9IDIxKSArCiAgc2NhbGVfeV9sb2cxMChicmVha3MgPSBjKC4wMDAxLCAuMDAxLCAwLjAxLCAuMSwgMSwgMTAsIDEwMCkpICsKICBsYWJzKHggPSAiSGVscGVyIHZpcnVzIE1PSSAoUEZVL2NlbGwpIiwKICAgICAgIHkgPSAiRm9sZCBjaGFuZ2UgcmVsYXRpdmUgdG8gV1Qgb25seSIpICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoNWUtNSwxKSkKCmdnc2F2ZShmaWxlID0gIlBsb3RzLzRCX0hlbHBfTWFNTjk5X0Jhci5wZGYiLAogICAgICAgaGVpZ2h0ID0gNSwKICAgICAgIHdpZHRoID0gNSwKICAgICAgIHVuaXRzID0gImluIikKCkJhc2UuUGxvdCArCiAgZ2VvbV9obGluZShsdHkgPSAyLCB5aW50ZXJjZXB0ID0gMSkgKwogIGdlb21fY29sKGRhdGEgPSBkZjQgJT4lCiAgICAgICAgICAgICBtdXRhdGUoRm9sZC5BdmcgPSBGb2xkLkF2ZyAlPiUgbmFfaWYoMCkpICU+JQogICAgICAgICAgICAgI211dGF0ZShGb2xkLkF2ZyA9IEZvbGQuQXZnICsgMSAqIChGb2xkLkF2ZyA9PSAwKSkgJT4lCiAgICAgICAgICAgICBmaWx0ZXIoTU9JICE9ICIwIiwgVmlydXMgPT0gIkdGSEs5OSIsIENlbGwgPT0gIkhUQkUiKSwKICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKCksCiAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgIGFlcyh4ID0gTU9JLAogICAgICAgICAgICAgICB5ID0gRm9sZC5BdmcsCiAgICAgICAgICAgICAgIGZpbGwgPSBWaXJ1c19DZWxsKSkgKwogIGdlb21fZXJyb3JiYXIoZGF0YSA9IGRmNCAlPiUKICAgICAgICAgICAgICAgICAgI211dGF0ZShGb2xkLkF2ZyA9IEZvbGQuQXZnICsgMSAqIChGb2xkLkF2ZyA9PSAwKSkgJT4lCiAgICAgICAgICAgICAgICAgIG11dGF0ZShGb2xkLkF2ZyA9IEZvbGQuQXZnICU+JSBuYV9pZigwKSkgJT4lCiAgICAgICAgICAgICAgICAgIGZpbHRlcihNT0kgIT0gIjAiLCBWaXJ1cyA9PSAiR0ZISzk5IiwgQ2VsbCA9PSAiSFRCRSIpLAogICAgICAgICAgICAgICAgYWVzKHggPSBNT0ksCiAgICAgICAgICAgICAgICAgICAgeW1pbiA9IEZvbGQuQXZnIC0gRm9sZC5zZSwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gRm9sZC5BdmcgKyBGb2xkLnNlKSwKICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHBhZGRpbmcgPSAwLjUpLAogICAgICAgICAgICAgICAgd2lkdGggPSAwLjQsCiAgICAgICAgICAgICAgICBsd2QgPSAwLjgpICsKICBnZW9tX2ppdHRlcihkYXRhID0gZGYyICU+JSAKICAgICAgICAgICAgICAgICNtdXRhdGUoRm9sZCA9IEZvbGQgJT4lIG5hX2lmKDApKSAlPiUKICAgICAgICAgICAgICAgIGZpbHRlcihNT0kgIT0gIjAiLCBWaXJ1cyA9PSAiR0ZISzk5IiwgQ2VsbCA9PSAiSFRCRSIpLAogICAgICAgICAgICAgIGFlcyh4ID0gTU9JICU+JSBmYWN0b3IsCiAgICAgICAgICAgICAgICAgIHkgPSBGb2xkLAogICAgICAgICAgICAgICAgICBmaWxsID0gVmlydXNfQ2VsbCksCiAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgICAgICNwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuMSksCiAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIod2lkdGggPSAwLjksIHBhZGRpbmcgPSAwLjIpLAogICAgICAgICAgICAgIHN0cm9rZSA9IDEsCiAgICAgICAgICAgICAgcGNoID0gMjEpICsKICBzY2FsZV95X2xvZzEwKGJyZWFrcyA9IGMoLjAwMDEsIC4wMDEsIDAuMDEsIC4xLCAxLCAxMCwgMTAwKSkgKwogIGxhYnMoeCA9ICJIZWxwZXIgdmlydXMgTU9JIChQRlUvY2VsbCkiLAogICAgICAgeSA9ICJGb2xkIGNoYW5nZSByZWxhdGl2ZSB0byBXVCBvbmx5IikgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygxLDEwMCkpCgpnZ3NhdmUoZmlsZSA9ICJQbG90cy80RF9IZWxwX0dGSEs5OV9IVEJFX0Jhci5wZGYiLAogICAgICAgaGVpZ2h0ID0gNSwKICAgICAgIHdpZHRoID0gNSwKICAgICAgIHVuaXRzID0gImluIikKCkJhc2UuUGxvdCArCiAgZ2VvbV9obGluZShsdHkgPSAyLCB5aW50ZXJjZXB0ID0gMSkgKwogIGdlb21fY29sKGRhdGEgPSBkZjQgJT4lCiAgICAgICAgICAgICBtdXRhdGUoRm9sZC5BdmcgPSBGb2xkLkF2ZyAlPiUgbmFfaWYoMCkpICU+JQogICAgICAgICAgICAgI211dGF0ZShGb2xkLkF2ZyA9IEZvbGQuQXZnICsgMSAqIChGb2xkLkF2ZyA9PSAwKSkgJT4lCiAgICAgICAgICAgICBmaWx0ZXIoTU9JICE9ICIwIiwgVmlydXMgPT0gIk5MMDkiLCBDZWxsID09ICJIVEJFIiksCiAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgpLAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICBhZXMoeCA9IE1PSSwKICAgICAgICAgICAgICAgeSA9IEZvbGQuQXZnLAogICAgICAgICAgICAgICBmaWxsID0gVmlydXNfQ2VsbCkpICsKICBnZW9tX2Vycm9yYmFyKGRhdGEgPSBkZjQgJT4lCiAgICAgICAgICAgICAgICAgICNtdXRhdGUoRm9sZC5BdmcgPSBGb2xkLkF2ZyArIDEgKiAoRm9sZC5BdmcgPT0gMCkpICU+JQogICAgICAgICAgICAgICAgICBtdXRhdGUoRm9sZC5BdmcgPSBGb2xkLkF2ZyAlPiUgbmFfaWYoMCkpICU+JQogICAgICAgICAgICAgICAgICBmaWx0ZXIoTU9JICE9ICIwIiwgVmlydXMgPT0gIk5MMDkiLCBDZWxsID09ICJIVEJFIiksCiAgICAgICAgICAgICAgICBhZXMoeCA9IE1PSSwKICAgICAgICAgICAgICAgICAgICB5bWluID0gRm9sZC5BdmcgLSBGb2xkLnNlLAogICAgICAgICAgICAgICAgICAgIHltYXggPSBGb2xkLkF2ZyArIEZvbGQuc2UpLAogICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIocGFkZGluZyA9IDAuNSksCiAgICAgICAgICAgICAgICB3aWR0aCA9IDAuNCwKICAgICAgICAgICAgICAgIGx3ZCA9IDAuOCkgKwogIGdlb21faml0dGVyKGRhdGEgPSBkZjIgJT4lIAogICAgICAgICAgICAgICAgI211dGF0ZShGb2xkID0gRm9sZCAlPiUgbmFfaWYoMCkpICU+JQogICAgICAgICAgICAgICAgZmlsdGVyKE1PSSAhPSAiMCIsIFZpcnVzID09ICJOTDA5IiwgQ2VsbCA9PSAiSFRCRSIpLAogICAgICAgICAgICAgIGFlcyh4ID0gTU9JICU+JSBmYWN0b3IsCiAgICAgICAgICAgICAgICAgIHkgPSBGb2xkLAogICAgICAgICAgICAgICAgICBmaWxsID0gVmlydXNfQ2VsbCksCiAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgICAgICNwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuMSksCiAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIod2lkdGggPSAwLjksIHBhZGRpbmcgPSAwLjIpLAogICAgICAgICAgICAgIHN0cm9rZSA9IDEsCiAgICAgICAgICAgICAgcGNoID0gMjEpICsKICBzY2FsZV95X2xvZzEwKGJyZWFrcyA9IGMoLjAwMDEsIC4wMDEsIDAuMDEsIC4xLCAxLCAxMCwgMTAwKSkgKwogIGxhYnMoeCA9ICJIZWxwZXIgdmlydXMgTU9JIChQRlUvY2VsbCkiLAogICAgICAgeSA9ICJGb2xkIGNoYW5nZSByZWxhdGl2ZSB0byBXVCBvbmx5IikgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYyguMSwxMCkpCgpnZ3NhdmUoZmlsZSA9ICJQbG90cy80RV9IZWxwX05MMDlfSFRCRV9CYXIucGRmIiwKICAgICAgIGhlaWdodCA9IDUsCiAgICAgICB3aWR0aCA9IDUsCiAgICAgICB1bml0cyA9ICJpbiIpCgojIExlZ2VuZCAtLS0tCkxlZ2VuZC5QbG90ID0gQmFzZS5QbG90ICsKICBnZW9tX3BvaW50KGRhdGEgPSBkZjIsCiAgICAgICAgICAgICBhZXMoeCA9IE1PSSwKICAgICAgICAgICAgICAgICB5ID0gRm9sZCwKICAgICAgICAgICAgICAgICBjb2xvciA9IFZpcnVzX0NlbGwpKSArCiAgZ2VvbV9zbW9vdGgoZGF0YSA9IGRmMiwKICAgICAgICAgICAgIGFlcyh4ID0gTU9JLAogICAgICAgICAgICAgICAgIHkgPSBGb2xkLAogICAgICAgICAgICAgICAgIGNvbG9yID0gVmlydXNfQ2VsbCwKICAgICAgICAgICAgICAgICBmaWxsID0gVmlydXNfQ2VsbCkpICsKICBsYWJzKGNvbG9yID0gTlVMTCwKICAgICAgIGZpbGwgPSBOVUxMKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IikKCmdnc2F2ZShnX2xlZ2VuZChMZWdlbmQuUGxvdCksCiAgICAgICBmaWxlID0gIlBsb3RzL0xlZ2VuZF80QS5wZGYiLAogICAgICAgaGVpZ2h0ID0gNCwKICAgICAgIHdpZHRoID0gMiwKICAgICAgIHVuaXRzID0gImluIikKCmBgYAoKYGBge3IgRmlndXJlIDYsIGV2YWwgPSBUUlVFfQoKQmFzZS5QbG90ID0gZ2dwbG90KCkgKwogIHRoZW1lKHRleHQ9ZWxlbWVudF90ZXh0KHNpemU9MTQsZmFjZT0iYm9sZCIpLAogICAgICAgIHN0cmlwLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSxtYXJnaW49bWFyZ2luKDAsMCwzLDApKSwKICAgICAgICBzdHJpcC50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksbWFyZ2luPW1hcmdpbigwLDAsMCwwKSxhbmdsZT0wKSwKICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSksCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTAsdmp1c3Q9MCxzaXplPXJlbCgxLjUpLGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLmxpbmUueCA9IGVsZW1lbnRfbGluZShzaXplPTAuNSksCiAgICAgICAgYXhpcy5saW5lLnkgPSBlbGVtZW50X2xpbmUoc2l6ZT0wLjUpLAogICAgICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfbGluZShzaXplPTAuNSksCiAgICAgICAgYXhpcy50aWNrcy55ID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjUpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjIpLGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuMikpLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJOQSIpCgpMZWdlbmQuUGxvdCA9IGdncGxvdCgpICsKICB0aGVtZSh0ZXh0PWVsZW1lbnRfdGV4dChzaXplPTE0LGZhY2U9ImJvbGQiKSwKICAgICAgICBzdHJpcC50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksbWFyZ2luPW1hcmdpbigwLDAsMywwKSksCiAgICAgICAgc3RyaXAudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLG1hcmdpbj1tYXJnaW4oMCwwLDAsMCksYW5nbGU9MCksCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSkpLAogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT0wLHZqdXN0PTAsc2l6ZT1yZWwoMS41KSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgYXhpcy5saW5lLnggPSBlbGVtZW50X2xpbmUoc2l6ZT0wLjUpLAogICAgICAgIGF4aXMubGluZS55ID0gZWxlbWVudF9saW5lKHNpemU9MC41KSwKICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2xpbmUoc2l6ZT0wLjUpLAogICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfbGluZShzaXplID0gMC41KSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS4yKSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjIpKSwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSkKCiMgRXhwdCAxIEFuYWx5c2lzIC0tLS0KY2VsbHJhbmdlcl9waXBlc3RhbmNlX3BhdGggPC0gIi9Vc2Vycy9qYWNvYm4wNy9Eb2N1bWVudHMvR0ZISzk5X011bHRpcGxpY2l0eS9EYXRhL0NlbGxSYW5nZXJfT3V0cHV0IgpHZW5vbWVzID0gYygnV1RfREYxXzAuMDcnLCdXVF9ERjFfMC4yJywnV1RfREYxXzAuNicsJ1dUX0RGMV8xLjgnLCdXVF9NRENLXzAuMDcnLCdXVF9NRENLXzAuMicsJ1dUX01EQ0tfMC42JywnV1RfTURDS18xLjgnKQpDZWxscyA9IGMocmVwKCJERjEiLDQpLHJlcCgiTURDSyIsNCkpCk1PSXMgPSByZXAoYygwLjA3LDAuMiwwLjYsMS44KSwyKQoKR0JNID0gZnVuY3Rpb24oaSkgewogIGdibSA9IGxvYWRfY2VsbHJhbmdlcl9tYXRyaXgoY2VsbHJhbmdlcl9waXBlc3RhbmNlX3BhdGgsIGdlbm9tZSA9IEdlbm9tZXNbaV0pCiAgdXNlX2dlbmVzID0gZ2V0X25vbnplcm9fZ2VuZXMoZ2JtKQogIHggPSBnYm1bdXNlX2dlbmVzLF0gJT4lIGV4cHJzICU+JSBhcy5tYXRyaXggJT4lIHQgJT4lIGRhdGEuZnJhbWUKICB4JFRvdGFsUk5BID0gcm93U3Vtcyh4KQogIAogIHggPSB4ICU+JSBtdXRhdGUoRmx1X1JOQSA9IFdGMTBQQjIgKyBXRjEwUEIxICsgV0YxMFBBICsgV0YxMEhBICsgV0YxME5QICsgV0YxME5BICsgV0YxME0gKyBXRjEwTlMsCiAgICAgICAgICAgICAgICAgICBUZXN0X1JOQSA9IFdGMTBQQjIgKyBXRjEwUEIxICsgV0YxMFBBICsgV0YxMEhBICsgV0YxME5QICsgV0YxME5BICsgV0YxME0gKyBXRjEwTlMsCiAgICAgICAgICAgICAgICAgICBUZXN0X1Byb3AgPSBUZXN0X1JOQSAvIFRvdGFsUk5BLAogICAgICAgICAgICAgICAgICAgRmx1X1Byb3AgPSBGbHVfUk5BIC8gVG90YWxSTkEpCiAgCiAgeCRDZWxsID0gQ2VsbHNbaV0KICB4JE1PSSA9IE1PSXNbaV0KICB4ICU+JSBkcGx5cjo6c2VsZWN0KENlbGwsTU9JLAogICAgICAgICAgICAgICAgICAgICAgV0YxMFBCMiwgV0YxMFBCMSwgV0YxMFBBLCBXRjEwSEEsIFdGMTBOUCwgV0YxME5BLCBXRjEwTSwgV0YxME5TLCAKICAgICAgICAgICAgICAgICAgICAgIEZsdV9STkEsVG90YWxSTkEsRmx1X1Byb3AsVGVzdF9Qcm9wKQp9CgpHQk1fQWdnciA9IGRvLmNhbGwoInJiaW5kIiwgbGFwcGx5KDE6bGVuZ3RoKEdlbm9tZXMpLEdCTSkpCgp3cml0ZS5jc3YoR0JNX0FnZ3IsCiAgICAgICAgICBmaWxlID0gZmlsZS5wYXRoKFByb2ouSG9tZSwiRGF0YSIsIjEwWF9FeHB0MV9SYXcuY3N2IiksCiAgICAgICAgICByb3cubmFtZXMgPSBGQUxTRSkKCmRmMSA9IHJlYWQuY3N2KGZpbGUgPSBmaWxlLnBhdGgoUHJvai5Ib21lLCJEYXRhIiwiMTBYX0V4cHQxX1Jhdy5jc3YiKSwKICAgICAgICAgICAgICAgaGVhZGVyID0gVFJVRSkgJT4lIAogIG11dGF0ZShXVCA9IFdGMTBQQjIgKyBXRjEwUEIxICsgV0YxMFBBICsgV0YxMEhBICsgV0YxME5QICsgV0YxME5BICsgV0YxME0gKyBXRjEwTlMsCiAgICAgICAgIFAzX05QID0gZmFjdG9yKHNpZ24oV0YxMFBCMikgKiBzaWduKFdGMTBQQjEpICogc2lnbihXRjEwUEEpICogc2lnbihXRjEwTlApKSwKICAgICAgICAgVGVzdF9Qcm9wID0gV1QgLyBGbHVfUk5BLAogICAgICAgICBUZXN0X1Byb3BfRmx1ID0gKFdUKSAvIEZsdV9STkEsCiAgICAgICAgIFRlc3RfUHJvcF9DZWxsID0gKFdUKSAvIFRvdGFsUk5BLAogICAgICAgICBUZXN0X1N1bSA9IFdULAogICAgICAgICBUZXN0X0xvZyA9IFRlc3RfU3VtICU+JSBsb2cxMCwKICAgICAgICAgTWVhbl9Mb2cgPSAwLAogICAgICAgICBNZWFuX0dhaW4gPSAwLAogICAgICAgICBNZWFuX1N1bSA9IDApICU+JSAKICBmaWx0ZXIoVGVzdF9TdW0gPiAwKSAlPiUKICBhcnJhbmdlKENlbGwsTU9JLFRlc3RfUHJvcF9DZWxsKSAlPiUKICBtdXRhdGUoQ2VsbC5JRCA9IDE6bGVuZ3RoKFRlc3RfUHJvcF9DZWxsKSwKICAgICAgICAgVGVzdF9HYWluID0gKFRlc3RfUHJvcF9DZWxsIC0gbGFnKFRlc3RfUHJvcF9DZWxsKSkgLyBsYWcoVGVzdF9Qcm9wX0NlbGwpKQoKVGhyZXNob2xkLmRmID0gZGYxICU+JSAKICBkcGx5cjo6c2VsZWN0KENlbGwsTU9JKSAlPiUgCiAgdW5pcXVlCgpkZjIgPSBkZjEgJT4lIGFycmFuZ2UoQ2VsbCxNT0ksVGVzdF9Qcm9wX0NlbGwpICU+JQogIGdyb3VwX2J5KENlbGwsTU9JKSAlPiUKICBtdXRhdGUoTWFyZ2luYWxfUHJvcCA9IChUZXN0X1Byb3BfQ2VsbCAtIGxhZyhUZXN0X1Byb3BfQ2VsbCkpIC8gbGFnKFRlc3RfUHJvcF9DZWxsKSkgJT4lCiAgbmEub21pdCgpICU+JQogIGZpbHRlcihNYXJnaW5hbF9Qcm9wID4gMCkKCiMgTm93LCBmaW5kIHBvaW50IG9mIG1heGltdW0gY3VydmF0dXJlIChncmVhdGVzdCBzZWNvbmQgZGVyaXZhdGl2ZSkKCmZvcihpIGluIDE6KG5yb3coVGhyZXNob2xkLmRmKSAvIDEpKSB7CiAgc3ViLmRmID0gZGYyICU+JSBmaWx0ZXIoQ2VsbCA9PSBUaHJlc2hvbGQuZGZbaSwiQ2VsbCJdLAogICAgICAgICAgICAgICAgICAgICAgICAgIE1PSSA9PSBUaHJlc2hvbGQuZGZbaSwiTU9JIl0pICU+JQogICAgbXV0YXRlKFRlc3RfUHJvcF9DZWxsX0xvZyA9IGxvZzEwKFRlc3RfUHJvcF9DZWxsKSkgCiAgCiAgbW9kZWwgPSBsb2VzcyhNYXJnaW5hbF9Qcm9wIH4gVGVzdF9Qcm9wX0NlbGxfTG9nLCAKICAgICAgICAgICAgICAgIGRhdGEgPSBzdWIuZGYsCiAgICAgICAgICAgICAgICBzcGFuID0gMC4yKQogIAogIHhyYW5nZSA9IHJhbmdlKHN1Yi5kZiRUZXN0X1Byb3BfQ2VsbF9Mb2cpCiAgeHNlcSA9IHNlcShmcm9tID0geHJhbmdlWzFdLCB0byA9IHhyYW5nZVsyXSwgYnkgPSAoeHJhbmdlWzJdIC0geHJhbmdlWzFdKSAvIDEwMCkKICBwcmVkID0gcHJlZGljdChtb2RlbCwgbmV3ZGF0YSA9IGRhdGEuZnJhbWUoVGVzdF9Qcm9wX0NlbGxfTG9nID0geHNlcSksIHNlID0gVFJVRSkKICB5ID0gcHJlZCRmaXQKICB5bWluID0geSAtIDEuOTYgKiBwcmVkJHNlLmZpdAogIHltYXggPSB5ICsgMS45NiAqIHByZWQkc2UuZml0CiAgbG9lc3MuZGYgPSBkYXRhLmZyYW1lKHggPSB4c2VxLCB5LCB5bWluLCB5bWF4LCBzZSA9IHByZWQkc2UuZml0KSAlPiUgbmEub21pdAogIHZhbGxleS5kZiA9IGxvZXNzLmRmICU+JQogICAgbXV0YXRlKHggPSAxMF54LAogICAgICAgICAgIERlY3JlYXNlZCA9IHkgPCBsYWcoeSksCiAgICAgICAgICAgSW5jcmVhc2luZyA9IHkgPCBsZWFkKHkpLAogICAgICAgICAgIExvY2FsLk1pbmltdW0gPSBEZWNyZWFzZWQgKiBJbmNyZWFzaW5nKSAlPiUKICAgIGZpbHRlcihMb2NhbC5NaW5pbXVtID09IDEpCiAgVGhyZXNob2xkLmRmW2ksIlRocmVzaG9sZCJdID0gdmFsbGV5LmRmWzEsIngiXQogIAp9CgoKQmFzZS5QbG90ICsKICBnZW9tX3BvaW50KGRhdGEgPSBkZjEgJT4lIGZpbHRlcihUZXN0X0dhaW4gPiAwKSAlPiUgbXV0YXRlKENlbGwgPSBDZWxsICU+JSByZWNvZGUoIkRGMSIgPSAiREYtMSIpKSwKICAgICAgICAgICAgIGFlcyh4ID0gVGVzdF9Qcm9wX0NlbGwsCiAgICAgICAgICAgICAgICAgeSA9IFRlc3RfR2FpbikpICsKICBnZW9tX3Ntb290aChkYXRhID0gZGYxICU+JSBmaWx0ZXIoVGVzdF9HYWluID4gMCkgJT4lIG11dGF0ZShDZWxsID0gQ2VsbCAlPiUgcmVjb2RlKCJERjEiID0gIkRGLTEiKSksCiAgICAgICAgICAgICAgYWVzKHggPSBUZXN0X1Byb3BfQ2VsbCwKICAgICAgICAgICAgICAgICAgeSA9IFRlc3RfR2FpbiwKICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBpbnRlcmFjdGlvbihNT0ksQ2VsbCksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gQ2VsbCksCiAgICAgICAgICAgICAgc2UgPSBGQUxTRSwKICAgICAgICAgICAgICBzcGFuID0gMC4yKSArCiAgZ2VvbV92bGluZShkYXRhID0gVGhyZXNob2xkLmRmICU+JSBtdXRhdGUoQ2VsbCA9IENlbGwgJT4lIHJlY29kZSgiREYxIiA9ICJERi0xIikpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBUaHJlc2hvbGQpLAogICAgICAgICAgICAgbHR5ID0gMikgKwogIGZhY2V0X3dyYXAoQ2VsbCB+IE1PSSwgc2NhbGVzID0gImZyZWUiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIk1EQ0siID0gInNreWJsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERi0xIiA9ICJkZWVwcGluazMiKSkgKwogIGxhYnMoeCA9ICJQcm9wb3J0aW9uIElBViBtUk5BIGluIHRyYW5zY3JpcHRvbWUiLAogICAgICAgeSA9ICJNYXJnaW5hbCBpbmNyZWFzZSBpbiAlIElBViBtUk5BIGluIHRyYW5zY3JpcHRvbWUiKSArCiAgc2NhbGVfeF9sb2cxMChicmVha3MgPSBjKDFlLTQsIDFlLTMsIDFlLTIsIDFlLTEsIDEpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIk5BIikKCmdnc2F2ZShmaWxlID0gIlBsb3RzL1N1cHA1QV9FeHB0MV9UaHJlc2hvbGQucGRmIiwKICAgICAgIGhlaWdodCA9IDksCiAgICAgICB3aWR0aCA9IDksCiAgICAgICB1bml0cyA9ICJpbiIpCgpkZjMgPSByaWdodF9qb2luKGRmMSxUaHJlc2hvbGQuZGYpICU+JQogIGZpbHRlcigoVGVzdF9Qcm9wX0NlbGwgPiBUaHJlc2hvbGQpKQoKd3JpdGUuY3N2KGRmMywKICAgICAgICAgIGZpbGUgPSBmaWxlLnBhdGgoUHJvai5Ib21lLCJEYXRhIiwiMTBYX0V4cHQxX1RyaW1tZWQuY3N2IiksCiAgICAgICAgICByb3cubmFtZXMgPSBGQUxTRSkKIyBFeHB0IDIgQW5hbHlzaXMgLS0tLQoKR2Vub21lcyA9IGMoJ0RGMV8wLjAyJywnREYxXzAuMDcnLCdERjFfMC4yJywnREYxXzAuNicsJ01EQ0tfMC4wMicsJ01EQ0tfMC4wNycsJ01EQ0tfMC4yJywnTURDS18wLjYnKQpDZWxscyA9IGMocmVwKCJERjEiLDQpLHJlcCgiTURDSyIsNCkpCk1PSXMgPSByZXAoYygwLjAyLDAuMDcsMC4yLDAuNiksMikKCkdCTSA9IGZ1bmN0aW9uKGkpIHsKICBnYm0gPSBsb2FkX2NlbGxyYW5nZXJfbWF0cml4KGNlbGxyYW5nZXJfcGlwZXN0YW5jZV9wYXRoLCBnZW5vbWUgPSBHZW5vbWVzW2ldKQogIHVzZV9nZW5lcyA9IGMoMToyNCxnZXRfbm9uemVyb19nZW5lcyhnYm0pKSAlPiUgdW5pcXVlCiAgeCA9IGdibVt1c2VfZ2VuZXMsXSAlPiUgZXhwcnMgJT4lIGFzLm1hdHJpeCAlPiUgdCAlPiUgZGF0YS5mcmFtZQogIHgkVG90YWxSTkEgPSByb3dTdW1zKHgpCiAgCiAgeCA9IHggJT4lIG11dGF0ZShGbHVfUk5BID0gV0YxMFBCMiArIFdGMTBQQjEgKyBXRjEwUEEgKyBXRjEwSEEgKyBXRjEwTlAgKyBXRjEwTkEgKyBXRjEwTSArIFdGMTBOUyArIAogICAgICAgICAgICAgICAgICAgICBtVmFyUEIyICsgbVZhclBCMSArIG1WYXJQQSArIG1WYXJIQSArIG1WYXJOUCArIG1WYXJOQSArIG1WYXJNICsgbVZhck5TICsgCiAgICAgICAgICAgICAgICAgICAgIG1IZWxwZXJQQjIgKyBtSGVscGVyUEIxICsgbUhlbHBlclBBICsgbUhlbHBlckhBICsgbUhlbHBlck5QICsgbUhlbHBlck5BICsgbUhlbHBlck0gKyBtSGVscGVyTlMsCiAgICAgICAgICAgICAgICAgICBUZXN0X1JOQSA9IFdGMTBQQjIgKyBXRjEwUEIxICsgV0YxMFBBICsgV0YxMEhBICsgV0YxME5QICsgV0YxME5BICsgV0YxME0gKyBXRjEwTlMgKyAKICAgICAgICAgICAgICAgICAgICAgbVZhclBCMiArIG1WYXJQQjEgKyBtVmFyUEEgKyBtVmFySEEgKyBtVmFyTlAgKyBtVmFyTkEgKyBtVmFyTSArIG1WYXJOUywKICAgICAgICAgICAgICAgICAgIFRlc3RfUHJvcCA9IFRlc3RfUk5BIC8gVG90YWxSTkEsCiAgICAgICAgICAgICAgICAgICBGbHVfUHJvcCA9IEZsdV9STkEgLyBUb3RhbFJOQSkKICAKICB4JENlbGwgPSBDZWxsc1tpXQogIHgkTU9JID0gTU9Jc1tpXQogIHggJT4lIGRwbHlyOjpzZWxlY3QoQ2VsbCxNT0ksCiAgICAgICAgICAgICAgIFdGMTBQQjIsIFdGMTBQQjEsIFdGMTBQQSwgV0YxMEhBLCBXRjEwTlAsIFdGMTBOQSwgV0YxME0sIFdGMTBOUywgCiAgICAgICAgICAgICAgIG1WYXJQQjIsIG1WYXJQQjEsIG1WYXJQQSwgbVZhckhBLCBtVmFyTlAsIG1WYXJOQSwgbVZhck0sIG1WYXJOUywgCiAgICAgICAgICAgICAgIG1IZWxwZXJQQjIsIG1IZWxwZXJQQjEsIG1IZWxwZXJQQSwgbUhlbHBlckhBLCBtSGVscGVyTlAsIG1IZWxwZXJOQSwgbUhlbHBlck0sIG1IZWxwZXJOUywKICAgICAgICAgICAgICAgRmx1X1JOQSxUb3RhbFJOQSxGbHVfUHJvcCxUZXN0X1Byb3ApCn0KR0JNX0FnZ3IgPSBkby5jYWxsKCJyYmluZCIsIGxhcHBseSgxOmxlbmd0aChHZW5vbWVzKSxHQk0pKQoKd3JpdGUuY3N2KEdCTV9BZ2dyLAogICAgICAgICAgZmlsZSA9IGZpbGUucGF0aChQcm9qLkhvbWUsIkRhdGEiLCIxMFhfRXhwdDJfUmF3LmNzdiIpLAogICAgICAgICAgcm93Lm5hbWVzID0gRkFMU0UpCgpkZjEgPSByZWFkLmNzdihmaWxlID0gZmlsZS5wYXRoKFByb2ouSG9tZSwiRGF0YSIsIjEwWF9FeHB0Ml9SYXcuY3N2IiksCiAgICAgICAgICAgICAgIGhlYWRlciA9IFRSVUUpICU+JSAKICBtdXRhdGUoV1QgPSBXRjEwUEIyICsgV0YxMFBCMSArIFdGMTBQQSArIFdGMTBIQSArIFdGMTBOUCArIFdGMTBOQSArIFdGMTBNICsgV0YxME5TLAogICAgICAgICBWQVIgPSBtVmFyUEIyICsgbVZhclBCMSArIG1WYXJQQSArIG1WYXJIQSArIG1WYXJOUCArIG1WYXJOQSArIG1WYXJNICsgbVZhck5TLAogICAgICAgICBIRUxQRVIgPSBtSGVscGVyUEIyICsgbUhlbHBlclBCMSArIG1IZWxwZXJQQSArIG1IZWxwZXJIQSArIG1IZWxwZXJOUCArIG1IZWxwZXJOQSArIG1IZWxwZXJNICsgbUhlbHBlck5TLAogICAgICAgICBIRUxQRVJfU2VnbWVudHMgPSBzaWduKG1IZWxwZXJQQjIpICsgc2lnbihtSGVscGVyUEIxKSArIHNpZ24obUhlbHBlclBBKSArIHNpZ24obUhlbHBlckhBKSArIHNpZ24obUhlbHBlck5QKSArIHNpZ24obUhlbHBlck5BKSArIHNpZ24obUhlbHBlck0pICsgc2lnbihtSGVscGVyTlMpLAogICAgICAgICBXVF9UZXN0X1Byb3AgPSBXVCAvIChXVCArIFZBUiksCiAgICAgICAgIFZBUl9UZXN0X1Byb3AgPSBWQVIgLyAoVkFSICsgV1QpLAogICAgICAgICBXVF9Qcm9wID0gV1QgLyBGbHVfUk5BLAogICAgICAgICBWQVJfUHJvcCA9IFZBUiAvIEZsdV9STkEsCiAgICAgICAgIFRlc3RfUHJvcF9GbHUgPSAoV1QgKyBWQVIpIC8gRmx1X1JOQSwKICAgICAgICAgVGVzdF9Qcm9wX0NlbGwgPSAoV1QgKyBWQVIpIC8gVG90YWxSTkEsCiAgICAgICAgIFRlc3RfU3VtID0gV1QgKyBWQVIsCiAgICAgICAgIEhFTFBFUl9Qcm9wID0gSEVMUEVSIC8gRmx1X1JOQSwKICAgICAgICAgUHVyaXR5ID0gcG1heChXVCxWQVIpIC8gVGVzdF9TdW0sCiAgICAgICAgIFRlc3RfTG9nID0gVGVzdF9TdW0gJT4lIGxvZzEwLAogICAgICAgICBNaW5vcl9GcmFjID0gcG1pbihXVCxWQVIpIC8gVGVzdF9TdW0gKiAoVGVzdF9TdW0gJT4lIGxvZzEwKSwKICAgICAgICAgTWVhbl9Mb2cgPSAwLAogICAgICAgICBNZWFuX0dhaW4gPSAwLAogICAgICAgICBNZWFuX1N1bSA9IDApICU+JSAKICBmaWx0ZXIoSEVMUEVSX1NlZ21lbnRzID09IDgsIFRlc3RfU3VtID4gMCkgJT4lCiAgYXJyYW5nZShDZWxsLE1PSSxUZXN0X1Byb3BfRmx1KSAlPiUKICBtdXRhdGUoQ2VsbC5JRCA9IDE6bGVuZ3RoKFRlc3RfU3VtKSwKICAgICAgICAgVGVzdF9HYWluID0gKFRlc3RfU3VtIC0gbGFnKFRlc3RfU3VtKSkgLyBsYWcoVGVzdF9TdW0pKQoKVGhyZXNob2xkLmRmID0gZGYxICU+JSAKICBkcGx5cjo6c2VsZWN0KENlbGwsTU9JKSAlPiUgCiAgdW5pcXVlCgpkZjIgPSBkZjEgJT4lIGFycmFuZ2UoQ2VsbCxNT0ksVGVzdF9Qcm9wX0NlbGwpICU+JQogIGdyb3VwX2J5KENlbGwsTU9JKSAlPiUKICBtdXRhdGUoVGVzdF9Mb2cgPSBUZXN0X0xvZyAlPiUgcm91bmQoMiksCiAgICAgICAgIE1hcmdpbmFsX1Rlc3QgPSAoVGVzdF9TdW0gLSBsYWcoVGVzdF9TdW0pKSAvIGxhZyhUZXN0X1N1bSksCiAgICAgICAgIE1hcmdpbmFsX1Byb3AgPSAoVGVzdF9Qcm9wX0NlbGwgLSBsYWcoVGVzdF9Qcm9wX0NlbGwpKSAvIGxhZyhUZXN0X1Byb3BfQ2VsbCksCiAgICAgICAgIE1hcmdpbmFsX0ZsdSA9IChUZXN0X1Byb3BfRmx1IC0gbGFnKFRlc3RfUHJvcF9GbHUpKSAvIGxhZyhUZXN0X1Byb3BfRmx1KSkgJT4lCiAgbmEub21pdCgpICU+JQogIGZpbHRlcihNYXJnaW5hbF9Qcm9wID4gMCkKCiMgTm93LCBmaW5kIHBvaW50IG9mIG1heGltdW0gY3VydmF0dXJlIChncmVhdGVzdCBzZWNvbmQgZGVyaXZhdGl2ZSkKCmZvcihpIGluIDE6bnJvdyhUaHJlc2hvbGQuZGYpKSB7CiAgc3ViLmRmID0gZGYyICU+JSBmaWx0ZXIoQ2VsbCA9PSBUaHJlc2hvbGQuZGZbaSwiQ2VsbCJdLAogICAgICAgICAgICAgICAgICAgICAgICAgIE1PSSA9PSBUaHJlc2hvbGQuZGZbaSwiTU9JIl0pICU+JQogICAgbXV0YXRlKFRlc3RfUHJvcF9DZWxsX0xvZyA9IGxvZzEwKFRlc3RfUHJvcF9DZWxsKSkgCiAgCiAgbW9kZWwgPSBsb2VzcyhNYXJnaW5hbF9Qcm9wIH4gVGVzdF9Qcm9wX0NlbGxfTG9nLCAKICAgICAgICAgICAgICAgIGRhdGEgPSBzdWIuZGYsCiAgICAgICAgICAgICAgICBzcGFuID0gMC4yKQogIAogIHhyYW5nZSA9IHJhbmdlKHN1Yi5kZiRUZXN0X1Byb3BfQ2VsbF9Mb2cpCiAgeHNlcSA9IHNlcShmcm9tID0geHJhbmdlWzFdLCB0byA9IHhyYW5nZVsyXSwgYnkgPSAoeHJhbmdlWzJdIC0geHJhbmdlWzFdKSAvIDEwMCkKICBwcmVkID0gcHJlZGljdChtb2RlbCwgbmV3ZGF0YSA9IGRhdGEuZnJhbWUoVGVzdF9Qcm9wX0NlbGxfTG9nID0geHNlcSksIHNlID0gVFJVRSkKICB5ID0gcHJlZCRmaXQKICB5bWluID0geSAtIDEuOTYgKiBwcmVkJHNlLmZpdAogIHltYXggPSB5ICsgMS45NiAqIHByZWQkc2UuZml0CiAgbG9lc3MuZGYgPSBkYXRhLmZyYW1lKHggPSB4c2VxLCB5LCB5bWluLCB5bWF4LCBzZSA9IHByZWQkc2UuZml0KSAlPiUgbmEub21pdAogIHZhbGxleS5kZiA9IGxvZXNzLmRmICU+JQogICAgbXV0YXRlKHggPSAxMF54LAogICAgICAgICAgIERlY3JlYXNlZCA9IHkgPCBsYWcoeSksCiAgICAgICAgICAgSW5jcmVhc2luZyA9IHkgPCBsZWFkKHkpLAogICAgICAgICAgIExvY2FsLk1pbmltdW0gPSBEZWNyZWFzZWQgKiBJbmNyZWFzaW5nKSAlPiUKICAgIGZpbHRlcihMb2NhbC5NaW5pbXVtID09IDEpCiAgVGhyZXNob2xkLmRmW2ksIlRocmVzaG9sZCJdID0gdmFsbGV5LmRmWzEsIngiXQogIAp9CgpCYXNlLlBsb3QgKwogIGdlb21fcG9pbnQoZGF0YSA9IGRmMiAlPiUgbXV0YXRlKENlbGwgPSBDZWxsICU+JSByZWNvZGUoIkRGMSIgPSAiREYtMSIpKSwKICAgICAgICAgICAgIGFlcyh4ID0gVGVzdF9Qcm9wX0NlbGwsCiAgICAgICAgICAgICAgICAgeSA9IE1hcmdpbmFsX1Byb3ApKSArCiAgZmFjZXRfd3JhcChDZWxsIH4gTU9JLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX3Ntb290aChkYXRhID0gZGYyICU+JSBtdXRhdGUoQ2VsbCA9IENlbGwgJT4lIHJlY29kZSgiREYxIiA9ICJERi0xIikpLAogICAgICAgICAgICAgIGFlcyh4ID0gVGVzdF9Qcm9wX0NlbGwsCiAgICAgICAgICAgICAgICAgIHkgPSBNYXJnaW5hbF9Qcm9wLAogICAgICAgICAgICAgICAgICBncm91cCA9IGludGVyYWN0aW9uKENlbGwsTU9JKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSBDZWxsKSwKICAgICAgICAgICAgICBzZSA9IEZBTFNFLAogICAgICAgICAgICAgIHNwYW4gPSAwLjIpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSBUaHJlc2hvbGQuZGYgJT4lIG11dGF0ZShDZWxsID0gQ2VsbCAlPiUgcmVjb2RlKCJERjEiID0gIkRGLTEiKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IFRocmVzaG9sZCksCiAgICAgICAgICAgICBsdHkgPSAyKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIk1EQ0siID0gInNreWJsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERi0xIiA9ICJkZWVwcGluazMiKSkgKwogIGxhYnMoeCA9ICJQcm9wb3J0aW9uIElBViBtUk5BIGluIHRyYW5zY3JpcHRvbWUiLAogICAgICAgeSA9ICJNYXJnaW5hbCBpbmNyZWFzZSBpbiAlIElBViBtUk5BIGluIHRyYW5zY3JpcHRvbWUiKSArCiAgc2NhbGVfeF9sb2cxMChicmVha3MgPSBjKDFlLTQsIDFlLTMsIDFlLTIsIDFlLTEsIDEpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIk5BIikKCmdnc2F2ZShmaWxlID0gIlBsb3RzL1N1cHA1Ql9FeHB0Ml9UaHJlc2hvbGQucGRmIiwKICAgICAgIGhlaWdodCA9IDksCiAgICAgICB3aWR0aCA9IDksCiAgICAgICB1bml0cyA9ICJpbiIpCgpkZjMgPSByaWdodF9qb2luKGRmMSxUaHJlc2hvbGQuZGYpICU+JQogIGZpbHRlcihUZXN0X1Byb3BfQ2VsbCA+IFRocmVzaG9sZCkKCndyaXRlLmNzdihkZjMsCiAgICAgICAgICBmaWxlID0gZmlsZS5wYXRoKFByb2ouSG9tZSwiRGF0YSIsIjEwWF9FeHB0Ml9UcmltbWVkLmNzdiIpLAogICAgICAgICAgcm93Lm5hbWVzID0gRkFMU0UpCgojIEJhciBQbG90cyBmb3IgQ2VsbCAjcyAtLS0tCgpTdW0uZGYxID0gcmJpbmQocmVhZC5jc3YoZmlsZSA9IGZpbGUucGF0aChQcm9qLkhvbWUsICJEYXRhIiwgIjEwWF9FeHB0MV9SYXcuY3N2IikpICU+JQogIG11dGF0ZShTdGF0dXMgPSBzaWduKEZsdV9STkEpKSAlPiUKICBmaWx0ZXIoU3RhdHVzID09IDApICU+JQogIGRwbHlyOjpzZWxlY3QoQ2VsbCwgTU9JLCBTdGF0dXMpLAogIHJlYWQuY3N2KGZpbGUgPSBmaWxlLnBhdGgoUHJvai5Ib21lLCAiRGF0YSIsICIxMFhfRXhwdDFfVHJpbW1lZC5jc3YiKSkgJT4lCiAgbXV0YXRlKFRlc3QgPSBzaWduKFdUKSwKICAgICAgICAgU3RhdHVzID0gVGVzdCArIFAzX05QKSAlPiUKICBkcGx5cjo6c2VsZWN0KENlbGwsIE1PSSwgU3RhdHVzKSAlPiUKICBmaWx0ZXIoU3RhdHVzID4gMCkpICU+JQogIGdyb3VwX2J5KENlbGwsTU9JLFN0YXR1cykgJT4lCiAgZHBseXI6OnN1bW1hcmlzZShDZWxsX051bSA9IGxlbmd0aChDZWxsKSkKCmRmLlRvdGFsID0gcmVhZC5jc3YoZmlsZSA9IGZpbGUucGF0aChQcm9qLkhvbWUsICJEYXRhIiwgIjEwWF9FeHB0MV9SYXcuY3N2IikpICU+JQogIGdyb3VwX2J5KENlbGwsTU9JKSAlPiUKICBkcGx5cjo6c3VtbWFyaXNlKFRvdGFsID0gbGVuZ3RoKENlbGwpKQoKZGYuVGVzdCA9IHJlYWQuY3N2KGZpbGUgPSBmaWxlLnBhdGgoUHJvai5Ib21lLCAiRGF0YSIsICIxMFhfRXhwdDFfVHJpbW1lZC5jc3YiKSkgJT4lCiAgbXV0YXRlKFRlc3QgPSBzaWduKFdUKSkgJT4lCiAgZ3JvdXBfYnkoQ2VsbCxNT0kpICU+JQogIGRwbHlyOjpzdW1tYXJpc2UoVGVzdCA9IHN1bShUZXN0KSwKICAgICAgICAgICAgICAgICAgIFAzX05QID0gc3VtKFAzX05QKSkKClN1bS5kZjEgPSByaWdodF9qb2luKGRmLlRvdGFsLGRmLlRlc3QpICU+JQogIG11dGF0ZShUb3RhbCA9IFRvdGFsIC0gVGVzdCwKICAgICAgICAgVGVzdCA9IFRlc3QgLSBQM19OUCwKICAgICAgICAgQ2VsbCA9IENlbGwgJT4lIHJlY29kZSgiREYxIiA9ICJERi0xIikpICU+JQogIG1lbHQoaWQgPSBjKCJDZWxsIiwiTU9JIikpCgoKCkJhc2UuUGxvdCArCiAgZ2VvbV9iYXIoZGF0YSA9IFN1bS5kZjEsCiAgICAgICAgICAgc3RhdCA9ICJpZGVudGl0eSIsCiAgICAgICAgICAgcG9zaXRpb24gPSAic3RhY2siLAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICBhZXMoeCA9IE1PSSAlPiUgZmFjdG9yLAogICAgICAgICAgICAgICB5ID0gdmFsdWUsCiAgICAgICAgICAgICAgIGFscGhhID0gdmFyaWFibGUsCiAgICAgICAgICAgICAgIGZpbGwgPSB2YXJpYWJsZSkpICsKICBsYWJzKHggPSAiTU9JIChOUCB1bml0cy9jZWxsKSIsCiAgICAgICB5ID0gIiMgY2VsbHMiKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiVG90YWwiID0gImdyYXk0MCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdCIgPSAiZ29sZDIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlAzX05QIiA9ICJnb2xkMiIpKSArCiAgc2NhbGVfYWxwaGFfbWFudWFsKHZhbHVlcyA9IGMoIlRvdGFsIiA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdCIgPSAwLjQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUDNfTlAiID0gMSkpICsKICBmYWNldF93cmFwKH4gQ2VsbCkKCmdnc2F2ZShmaWxlID0gIlBsb3RzL1N1cHA2QV9FeHB0MV9OdW1iZXJzLnBkZiIsCiAgICAgICBoZWlnaHQgPSA1LAogICAgICAgd2lkdGggPSA1LAogICAgICAgdW5pdHMgPSAiaW4iKQoKTGVnZW5kLjZBID0gTGVnZW5kLlBsb3QgKwogIGdlb21fYmFyKGRhdGEgPSBTdW0uZGYxICU+JSBtdXRhdGUodmFyaWFibGUgPSB2YXJpYWJsZSAlPiUgcmVjb2RlKCJUb3RhbCIgPSAiVG90YWwgY2VsbHMiLCJUZXN0IiA9ICJQb2x5bWVyYXNlIGFic2VudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlAzX05QIiA9ICJQb2x5bWVyYXNlIHByZXNlbnQiKSksCiAgICAgICAgICAgc3RhdCA9ICJpZGVudGl0eSIsCiAgICAgICAgICAgcG9zaXRpb24gPSAic3RhY2siLAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICBhZXMoeCA9IE1PSSAlPiUgZmFjdG9yLAogICAgICAgICAgICAgICB5ID0gdmFsdWUsCiAgICAgICAgICAgICAgIGFscGhhID0gdmFyaWFibGUsCiAgICAgICAgICAgICAgIGZpbGwgPSB2YXJpYWJsZSkpICsKICBsYWJzKHggPSAiTU9JIChOUCB1bml0cy9jZWxsKSIsCiAgICAgICB5ID0gIiMgY2VsbHMiLAogICAgICAgZmlsbCA9IE5VTEwsCiAgICAgICBhbHBoYSA9IE5VTEwpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJUb3RhbCBjZWxscyIgPSAiZ3JheTQwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQb2x5bWVyYXNlIGFic2VudCIgPSAiZ29sZDIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBvbHltZXJhc2UgcHJlc2VudCIgPSAiZ29sZDIiKSkgKwogIHNjYWxlX2FscGhhX21hbnVhbCh2YWx1ZXMgPSBjKCJUb3RhbCBjZWxscyIgPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQb2x5bWVyYXNlIGFic2VudCIgPSAwLjQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBvbHltZXJhc2UgcHJlc2VudCIgPSAxKSkgKwogIGZhY2V0X3dyYXAofiBDZWxsKQoKZ2dzYXZlKGdfbGVnZW5kKExlZ2VuZC42QSksCiAgICAgICBmaWxlID0gIlBsb3RzL0xlZ2VuZF9TdXBwNkEucGRmIiwKICAgICAgIGhlaWdodCA9IDMsCiAgICAgICB3aWR0aCA9IDIsCiAgICAgICB1bml0cyA9ICJpbiIpCiAgCmRmLlRlc3QgPSByZWFkLmNzdihmaWxlID0gZmlsZS5wYXRoKFByb2ouSG9tZSwgIkRhdGEiLCAiMTBYX0V4cHQyX1RyaW1tZWQuY3N2IikpICU+JQogIG11dGF0ZShIZWxwZXIgPSBzaWduKG1IZWxwZXJQQjIpICogc2lnbihtSGVscGVyUEIxKSAqIHNpZ24obUhlbHBlclBBKSAqIHNpZ24obUhlbHBlckhBKSAqIHNpZ24obUhlbHBlck5QKSAqIHNpZ24obUhlbHBlck5BKSAqIHNpZ24obUhlbHBlck0pICogc2lnbihtSGVscGVyTlMpLAogICAgICAgICBUZXN0ID0gSGVscGVyICogc2lnbihUZXN0X1N1bSksCiAgICAgICAgIFN0YXR1cyA9IEhlbHBlciArIFRlc3QpICU+JQogICNmaWx0ZXIoU3RhdHVzID4gMSkgJT4lCiAgZmlsdGVyKFRlc3QgPT0gMSkgJT4lCiAgZ3JvdXBfYnkoQ2VsbCxNT0kpICU+JQogIGRwbHlyOjpzdW1tYXJpc2UoVGVzdCA9IGxlbmd0aChDZWxsKSkKCmRmLlRvdGFsID0gcmVhZC5jc3YoZmlsZSA9IGZpbGUucGF0aChQcm9qLkhvbWUsICJEYXRhIiwgIjEwWF9FeHB0Ml9SYXcuY3N2IikpICU+JQogIG11dGF0ZShIZWxwZXIgPSBzaWduKG1IZWxwZXJQQjIpICogc2lnbihtSGVscGVyUEIxKSAqIHNpZ24obUhlbHBlclBBKSAqIHNpZ24obUhlbHBlckhBKSAqIHNpZ24obUhlbHBlck5QKSAqIHNpZ24obUhlbHBlck5BKSAqIHNpZ24obUhlbHBlck0pICogc2lnbihtSGVscGVyTlMpKSAlPiUKICBncm91cF9ieShDZWxsLE1PSSkgJT4lCiAgZHBseXI6OnN1bW1hcmlzZShUb3RhbCA9IGxlbmd0aChDZWxsKSwKICAgICAgICAgICAgICAgICAgIEhlbHBlciA9IHN1bShIZWxwZXIpKQoKU3VtLmRmMSA9IHJpZ2h0X2pvaW4oZGYuVG90YWwsZGYuVGVzdCkgJT4lCiAgbXV0YXRlKFRvdGFsID0gVG90YWwgLSBIZWxwZXIsCiAgICAgICAgIEhlbHBlciA9IEhlbHBlciAtIFRlc3QsCiAgICAgICAgIENlbGwgPSBDZWxsICU+JSByZWNvZGUoIkRGMSIgPSAiREYtMSIpKSAlPiUKICBtZWx0KGlkID0gYygiQ2VsbCIsIk1PSSIpKQoKQmFzZS5QbG90ICsKICBnZW9tX2JhcihkYXRhID0gU3VtLmRmMSwKICAgICAgICAgICBzdGF0ID0gImlkZW50aXR5IiwKICAgICAgICAgICBwb3NpdGlvbiA9ICJzdGFjayIsCiAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgIGFlcyh4ID0gTU9JICU+JSBmYWN0b3IsCiAgICAgICAgICAgICAgIHkgPSB2YWx1ZSwKICAgICAgICAgICAgICAgYWxwaGEgPSB2YXJpYWJsZSwKICAgICAgICAgICAgICAgZmlsbCA9IHZhcmlhYmxlKSkgKwogIGxhYnMoeCA9ICJNT0kgKE5QIHVuaXRzL2NlbGwpIiwKICAgICAgIHkgPSAiIyBjZWxscyIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJUb3RhbCIgPSAiZ3JheTQwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxwZXIiID0gImRhcmtvcmFuZ2UyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0IiA9ICJkYXJrb3JhbmdlMiIpKSArCiAgc2NhbGVfYWxwaGFfbWFudWFsKHZhbHVlcyA9IGMoIlRvdGFsIiA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHBlciIgPSAwLjQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3QiID0gMSkpICsKICBmYWNldF93cmFwKH4gQ2VsbCkKCmdnc2F2ZShmaWxlID0gIlBsb3RzL1N1cHA2Q19FeHB0Ml9OdW1iZXJzLnBkZiIsCiAgICAgICBoZWlnaHQgPSA1LAogICAgICAgd2lkdGggPSA1LAogICAgICAgdW5pdHMgPSAiaW4iKQoKTGVnZW5kLjZDID0gTGVnZW5kLlBsb3QgKwogIGdlb21fYmFyKGRhdGEgPSBTdW0uZGYxICU+JSBtdXRhdGUodmFyaWFibGUgPSB2YXJpYWJsZSAlPiUgcmVjb2RlKCJUb3RhbCIgPSAiVG90YWwgY2VsbHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxwZXIiID0gIkhlbHBlcisiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0IiA9ICJXVCsgb3IgbVZhcisiKSksCiAgICAgICAgICAgc3RhdCA9ICJpZGVudGl0eSIsCiAgICAgICAgICAgcG9zaXRpb24gPSAic3RhY2siLAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICBhZXMoeCA9IE1PSSAlPiUgZmFjdG9yLAogICAgICAgICAgICAgICB5ID0gdmFsdWUsCiAgICAgICAgICAgICAgIGFscGhhID0gdmFyaWFibGUsCiAgICAgICAgICAgICAgIGZpbGwgPSB2YXJpYWJsZSkpICsKICBsYWJzKHggPSAiTU9JIChOUCB1bml0cy9jZWxsKSIsCiAgICAgICB5ID0gIiMgY2VsbHMiLAogICAgICAgYWxwaGEgPSBOVUxMLAogICAgICAgZmlsbCA9IE5VTEwpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJUb3RhbCBjZWxscyIgPSAiZ3JheTQwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxwZXIrIiA9ICJkYXJrb3JhbmdlMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV1QrIG9yIG1WYXIrIiA9ICJkYXJrb3JhbmdlMiIpKSArCiAgc2NhbGVfYWxwaGFfbWFudWFsKHZhbHVlcyA9IGMoIlRvdGFsIGNlbGxzIiA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHBlcisiID0gMC40LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXVCsgb3IgbVZhcisiID0gMSkpICsKICBmYWNldF93cmFwKH4gQ2VsbCkKCkxlZ2VuZC42QwpnZ3NhdmUoZ19sZWdlbmQoTGVnZW5kLjZDKSwKICAgICAgIGZpbGUgPSAiUGxvdHMvTGVnZW5kX1N1cHA2Qy5wZGYiLAogICAgICAgaGVpZ2h0ID0gMywKICAgICAgIHdpZHRoID0gMiwKICAgICAgIHVuaXRzID0gImluIikKCiMgVmlvbGluIFBsb3RzIGZyb20gQ2xlYW5lZCBEYXRhIC0tLS0KCmRmMSA9IHJlYWQuY3N2KGZpbGUgPSBmaWxlLnBhdGgoUHJvai5Ib21lLCAiRGF0YSIsICIxMFhfRXhwdDFfVHJpbW1lZC5jc3YiKSkgJT4lCiAgbXV0YXRlKFdULlNlZ21lbnRzID0gc2lnbihXRjEwUEIyKSArIHNpZ24oV0YxMFBCMSkgKyBzaWduKFdGMTBQQSkgKyBzaWduKFdGMTBIQSkgKyBzaWduKFdGMTBOUCkgKyBzaWduKFdGMTBOQSkgKyBzaWduKFdGMTBNKSArIHNpZ24oV0YxME5TKSwKICAgICAgICAgQ2VsbCA9IENlbGwgJT4lIHJlY29kZSgiREYxIiA9ICJERi0xIikpCgpNZWRpYW4uZGYxID0gZGYxICU+JSBncm91cF9ieShDZWxsLE1PSSkgJT4lCiAgZHBseXI6OnN1bW1hcmlzZShNZWRpYW5fVU1JID0gbWVkaWFuKFRvdGFsUk5BKSkKTm9ybS5kZjEgPSByaWdodF9qb2luKGRmMSxNZWRpYW4uZGYxKSAlPiUKICBtdXRhdGUoTm9ybV9GYWN0b3IgPSBNZWRpYW5fVU1JIC8gVG90YWxSTkEsCiAgICAgICAgIFdUID0gKFdUICogTm9ybV9GYWN0b3IpICU+JSBsb2cxMCkKCmRmMiA9IHJlYWQuY3N2KGZpbGUgPSBmaWxlLnBhdGgoUHJvai5Ib21lLCAiRGF0YSIsICIxMFhfRXhwdDJfVHJpbW1lZC5jc3YiKSkgJT4lIAogIG11dGF0ZShXVC5TZWdtZW50cyA9IHNpZ24oV0YxMFBCMikgKyBzaWduKFdGMTBQQjEpICsgc2lnbihXRjEwUEEpICsgc2lnbihXRjEwSEEpICsgc2lnbihXRjEwTlApICsgc2lnbihXRjEwTkEpICsgc2lnbihXRjEwTSkgKyBzaWduKFdGMTBOUyksCiAgICAgICAgIFZBUi5TZWdtZW50cyA9IHNpZ24obVZhclBCMikgKyBzaWduKG1WYXJQQjEpICsgc2lnbihtVmFyUEEpICsgc2lnbihtVmFySEEpICsgc2lnbihtVmFyTlApICsgc2lnbihtVmFyTkEpICsgc2lnbihtVmFyTSkgKyBzaWduKG1WYXJOUyksCiAgICAgICAgIENlbGwgPSBDZWxsICU+JSByZWNvZGUoIkRGMSIgPSAiREYtMSIpKQoKTWVkaWFuLmRmMiA9IGRmMiAlPiUgZ3JvdXBfYnkoQ2VsbCxNT0kpICU+JQogIGRwbHlyOjpzdW1tYXJpc2UoTWVkaWFuX1VNSSA9IG1lZGlhbihUb3RhbFJOQSkpCk5vcm0uZGYyID0gcmlnaHRfam9pbihkZjIsTWVkaWFuLmRmMikgJT4lCiAgICBtdXRhdGUoTm9ybV9GYWN0b3IgPSBNZWRpYW5fVU1JIC8gVG90YWxSTkEsCiAgICAgICAgICAgV1QgPSAoV1QgKiBOb3JtX0ZhY3RvcikgJT4lIGxvZzEwLAogICAgICAgICAgIFZBUiA9IChWQVIgKiBOb3JtX0ZhY3RvcikgJT4lIGxvZzEwKQoKU3VtLmRmID0gcmJpbmQoTm9ybS5kZjEgJT4lIGRwbHlyOjpzZWxlY3QoQ2VsbCxNT0ksV1QsV1QuU2VnbWVudHMpICU+JSBkcGx5cjo6cmVuYW1lKFRlc3QgPSBXVCxTZWdtZW50cyA9IFdULlNlZ21lbnRzKSAlPiUgbXV0YXRlKEhlbHAgPSAiVmlydXMgYWxvbmUiKSwKICAgICAgICAgICAgICAgcmJpbmQoTm9ybS5kZjIgJT4lIGZpbHRlcihXVC5TZWdtZW50cyA+IDApICU+JSBkcGx5cjo6c2VsZWN0KENlbGwsTU9JLFdULFdULlNlZ21lbnRzKSAlPiUgZHBseXI6OnJlbmFtZShUZXN0ID0gV1QsU2VnbWVudHMgPSBXVC5TZWdtZW50cyksCiAgICAgICAgICAgICAgICAgICAgIE5vcm0uZGYyICU+JSBmaWx0ZXIoVkFSLlNlZ21lbnRzID4gMCkgJT4lIGRwbHlyOjpzZWxlY3QoQ2VsbCxNT0ksVkFSLFZBUi5TZWdtZW50cykgJT4lIGRwbHlyOjpyZW5hbWUoVGVzdCA9IFZBUixTZWdtZW50cyA9IFZBUi5TZWdtZW50cykpICU+JQogICAgICAgICAgICAgICAgIG11dGF0ZShIZWxwID0gIncvIG1WQVIyIikpCgpCYXNlLlBsb3QgKwogIGdlb21fdmlvbGluKGRhdGEgPSBOb3JtLmRmMSwKICAgICAgICAgICAgICBhZXMoeCA9IE1PSSAlPiUgZmFjdG9yLAogICAgICAgICAgICAgICAgICB5ID0gV1QsCiAgICAgICAgICAgICAgICAgIGZpbGwgPSBDZWxsLAogICAgICAgICAgICAgICAgICBhbHBoYSA9IFAzX05QICU+JSBmYWN0b3IpLAogICAgICAgICAgICAgIHNjYWxlID0gImFyZWEiLAogICAgICAgICAgICAgIGRyYXdfcXVhbnRpbGVzID0gMC41LAogICAgICAgICAgICAgIGx3ZCA9IDAuOCkgKwogIGZhY2V0X3dyYXAofiBDZWxsKSArCiAgY29vcmRfZmxpcCgpICsKICBzY2FsZV9hbHBoYV9tYW51YWwodmFsdWVzID0gYygiMCIgPSAwLjI1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9IDEpKSArCiAgbGFicyh4ID0gIk1PSSAoTlAgdW5pdHMvY2VsbCkiLAogICAgICAgeSA9IFRlWCgiXFx0ZXh0YmZ7JFxcbG9nXzFfMCQgbm9ybWFsaXplZCBVTUkgY291bnRzL2NlbGx9IikpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJERi0xIiA9ICJkZWVwcGluazMiLCAiTURDSyIgPSAic2t5Ymx1ZSIpKQoKZ2dzYXZlKGZpbGUgPSAiUGxvdHMvU3VwcDZCX1dUX1BvbHltZXJhc2UucGRmIiwKICAgICAgIGhlaWdodCA9IDUsCiAgICAgICB3aWR0aCA9IDUsCiAgICAgICB1bml0cyA9ICJpbiIpCgpMZWdlbmQuNkIgPSBMZWdlbmQuUGxvdCArCiAgZ2VvbV92aW9saW4oZGF0YSA9IE5vcm0uZGYxICU+JSBtdXRhdGUoUDNfTlAgPSBQM19OUCAlPiUgcmVjb2RlKCIwIiA9ICJBYnNlbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiUHJlc2VudCIpKSwKICAgICAgICAgICAgICBhZXMoeCA9IE1PSSAlPiUgZmFjdG9yLAogICAgICAgICAgICAgICAgICB5ID0gV1QsCiAgICAgICAgICAgICAgICAgIGZpbGwgPSBDZWxsLAogICAgICAgICAgICAgICAgICBhbHBoYSA9IFAzX05QKSwKICAgICAgICAgICAgICBzY2FsZSA9ICJhcmVhIiwKICAgICAgICAgICAgICBkcmF3X3F1YW50aWxlcyA9IDAuNSwKICAgICAgICAgICAgICBsd2QgPSAwLjgpICsKICBmYWNldF93cmFwKH4gQ2VsbCkgKwogIGNvb3JkX2ZsaXAoKSArCiAgc2NhbGVfYWxwaGFfbWFudWFsKHZhbHVlcyA9IGMoIkFic2VudCIgPSAwLjI1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmVzZW50IiA9IDEpKSArCiAgbGFicyh4ID0gIk1PSSAoTlAgdW5pdHMvY2VsbCkiLAogICAgICAgeSA9IFRlWCgiXFx0ZXh0YmZ7JFxcbG9nXzFfMCQgbm9ybWFsaXplZCBVTUkgY291bnRzL2NlbGx9IiksCiAgICAgICBhbHBoYSA9ICJQb2x5bWVyYXNlIikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIkRGLTEiID0gImRlZXBwaW5rMyIsICJNRENLIiA9ICJza3libHVlIikpCgpnZ3NhdmUoZ19sZWdlbmQoTGVnZW5kLjZCKSwKICAgICAgIGZpbGUgPSAiUGxvdHMvTGVnZW5kX1N1cHA2Qi5wZGYiLAogICAgICAgaGVpZ2h0ID0gMywKICAgICAgIHdpZHRoID0gMiwKICAgICAgIHVuaXRzID0gImluIikKCkJhc2UuUGxvdCArIAogIGdlb21fdmlvbGluKGRhdGEgPSBTdW0uZGYsCiAgICAgICAgICAgICAgYWVzKHggPSBNT0kgJT4lIGZhY3RvciwKICAgICAgICAgICAgICAgICAgeSA9IFRlc3QsCiAgICAgICAgICAgICAgICAgIGZpbGwgPSBDZWxsKSwKICAgICAgICAgICAgICBzY2FsZSA9ICJhcmVhIiwKICAgICAgICAgICAgICBkcmF3X3F1YW50aWxlcyA9IDAuNSwKICAgICAgICAgICAgICBsd2QgPSAwLjgpICsKICBmYWNldF93cmFwKH4gSGVscCkgKwogICAgY29vcmRfZmxpcCgpICsKICAgIGxhYnMoeCA9ICJNT0kgKE5QIHVuaXRzL2NlbGwpIiwKICAgICAgICAgeSA9IFRlWCgiXFx0ZXh0YmZ7JFxcbG9nXzFfMCQgbm9ybWFsaXplZCBVTUkgY291bnRzL2NlbGx9IikpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIkRGLTEiID0gImRlZXBwaW5rMyIsICJNRENLIiA9ICJza3libHVlIikpCgpnZ3NhdmUoZmlsZSA9ICJQbG90cy82QV9XVF92c19IZWxwZXIucGRmIiwKICAgICAgIGhlaWdodCA9IDUsCiAgICAgICB3aWR0aCA9IDUsCiAgICAgICB1bml0cyA9ICJpbiIpCgpMZWdlbmQuNkEgPSBMZWdlbmQuUGxvdCArIAogIGdlb21fdmlvbGluKGRhdGEgPSBTdW0uZGYsCiAgICAgICAgICAgICAgYWVzKHggPSBNT0kgJT4lIGZhY3RvciwKICAgICAgICAgICAgICAgICAgeSA9IFRlc3QsCiAgICAgICAgICAgICAgICAgIGZpbGwgPSBDZWxsKSwKICAgICAgICAgICAgICBzY2FsZSA9ICJhcmVhIiwKICAgICAgICAgICAgICBkcmF3X3F1YW50aWxlcyA9IDAuNSwKICAgICAgICAgICAgICBsd2QgPSAwLjgpICsKICBmYWNldF93cmFwKH4gSGVscCkgKwogIGNvb3JkX2ZsaXAoKSArCiAgbGFicyh4ID0gIk1PSSAoTlAgdW5pdHMvY2VsbCkiLAogICAgICAgeSA9IFRlWCgiXFx0ZXh0YmZ7JFxcbG9nXzFfMCQgbm9ybWFsaXplZCBVTUkgY291bnRzL2NlbGx9IikpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJERi0xIiA9ICJkZWVwcGluazMiLCAiTURDSyIgPSAic2t5Ymx1ZSIpKQoKZ2dzYXZlKGdfbGVnZW5kKExlZ2VuZC42QSksCiAgICAgICBmaWxlID0gIlBsb3RzL0xlZ2VuZF82QS5wZGYiLAogICAgICAgaGVpZ2h0ID0gMywKICAgICAgIHdpZHRoID0gMiwKICAgICAgIHVuaXRzID0gImluIikKCkJhc2UuUGxvdCArIAogIGdlb21fdmlvbGluKGRhdGEgPSBTdW0uZGYsCiAgICAgICAgICAgICAgYWVzKHggPSBNT0kgJT4lIGZhY3RvciwKICAgICAgICAgICAgICAgICAgeSA9IFNlZ21lbnRzLAogICAgICAgICAgICAgICAgICBmaWxsID0gQ2VsbCksCiAgICAgICAgICAgICAgc2NhbGUgPSAid2lkdGgiLAogICAgICAgICAgICAgIGRyYXdfcXVhbnRpbGVzID0gMC41LAogICAgICAgICAgICAgIGx3ZCA9IDAuOCkgKwogIGZhY2V0X3dyYXAofiBIZWxwKSArCiAgY29vcmRfZmxpcCgpICsKICBsYWJzKHggPSAiTU9JIChOUCB1bml0cy9jZWxsKSIsCiAgICAgICB5ID0gIlNlZ21lbnRzL2NlbGwiKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiREYtMSIgPSAiZGVlcHBpbmszIiwgIk1EQ0siID0gInNreWJsdWUiKSkKCmdnc2F2ZShmaWxlID0gIlBsb3RzLzZCX1NlZ21lbnRzLnBkZiIsCiAgICAgICBoZWlnaHQgPSA1LAogICAgICAgd2lkdGggPSA1LAogICAgICAgdW5pdHMgPSAiaW4iKQoKIyBTdGF0cyAtLS0tCgpTdW0uZGYgJT4lIGdyb3VwX2J5KENlbGwsTU9JLEhlbHApICU+JQogIGRwbHlyOjpzdW1tYXJpc2UoQ2VsbF9OdW0gPSBsZW5ndGgoQ2VsbCkpICU+JQogIGFycmFuZ2UoSGVscCxDZWxsX051bSkKCnggPSBTdW0uZGYgJT4lIGdyb3VwX2J5KENlbGwsTU9JLEhlbHApICU+JQogIGRwbHlyOjpzdW1tYXJpc2UoQ2VsbF9OdW0gPSBsZW5ndGgoQ2VsbCkpICU+JQogIGFycmFuZ2UoSGVscCxDZWxsX051bSkgJT4lIGZpbHRlcihIZWxwID09ICJWaXJ1cyBhbG9uZSIpCngkQ2VsbF9OdW0gJT4lIHN1bQoKZGYxID0gU3VtLmRmICU+JSBmaWx0ZXIoSGVscCA9PSAiVmlydXMgYWxvbmUiKQoKZGYxID0gcmVhZC5jc3YoZmlsZSA9IGZpbGUucGF0aChQcm9qLkhvbWUsICJEYXRhIiwgIjEwWF9FeHB0MV9UcmltbWVkLmNzdiIpKQoKTWVkaWFuLmRmMSA9IGRmMSAlPiUgZ3JvdXBfYnkoQ2VsbCxNT0kpICU+JQogIGRwbHlyOjpzdW1tYXJpc2UoTWVkaWFuX1VNSSA9IG1lZGlhbihUb3RhbFJOQSkpCk5vcm0uZGYxID0gcmlnaHRfam9pbihkZjEsTWVkaWFuLmRmMSkgJT4lCiAgbXV0YXRlKE5vcm1fRmFjdG9yID0gTWVkaWFuX1VNSSAvIFRvdGFsUk5BLAogICAgICAgICBXVCA9IChXVCAqIE5vcm1fRmFjdG9yKSAlPiUgbG9nMTApCgpsbWVyKGZvcm11bGEgPSBXVCB+IFAzX05QICsgKDF8TU9JKSwKICAgICBkYXRhID0gTm9ybS5kZjEgJT4lIGZpbHRlcihDZWxsID09ICJERjEiKSkgJT4lIHN1bW1hcnkKMTBeKC42MSkgIyA0LjEtZm9sZCBpbmNyZWFzZSBpbiBERi0xCmxtZXIoZm9ybXVsYSA9IFdUIH4gUDNfTlAgKyAoMXxNT0kpLAogICAgIGRhdGEgPSBOb3JtLmRmMSAlPiUgZmlsdGVyKENlbGwgPT0gIk1EQ0siKSkgJT4lIHN1bW1hcnkKMTBeKDAuMzkpICMgMi41LWZvbGQgaW5jcmVhc2UgaW4gTURDSwoKbG1lcihmb3JtdWxhID0gV1QgfiBQM19OUCAqIENlbGwgKyAoMXxNT0kpLAogICAgIGRhdGEgPSBOb3JtLmRmMSkgJT4lIHN1bW1hcnkKMTBeKDAuNTgpICMzLjgtZm9sZCBpbmNyZWFzZSBpbiBhYnVuZGFuY2UgZnJvbSBQM19OUAoxIC0gMTBeKC0uMjUpICMgNDElIHJlZHVjaXRvbiBpbiBNRENLIGNlbGxzCgpsbWVyKGZvcm11bGEgPSBXVCB+IENlbGwgKyAoMXxNT0kpLAogICAgIGRhdGEgPSBOb3JtLmRmMSkgJT4lIHN1bW1hcnkKMSAtIDEwXigtLjI1KSAjIDQxJSByZWR1Y2l0b24gaW4gTURDSyBjZWxscwoxMF4oLjI1KSAtIDEgIyA0MSUgcmVkdWNpdG9uIGluIE1EQ0sgY2VsbHMKCmRmMiA9IHJlYWQuY3N2KGZpbGUgPSBmaWxlLnBhdGgoUHJvai5Ib21lLCAiRGF0YSIsICIxMFhfRXhwdDJfVHJpbW1lZC5jc3YiKSkKTWVkaWFuLmRmMiA9IGRmMiAlPiUgZ3JvdXBfYnkoQ2VsbCxNT0kpICU+JQogIGRwbHlyOjpzdW1tYXJpc2UoTWVkaWFuX1VNSSA9IG1lZGlhbihUb3RhbFJOQSkpCk5vcm0uZGYyID0gcmlnaHRfam9pbihkZjIsTWVkaWFuLmRmMikgJT4lCiAgbXV0YXRlKE5vcm1fRmFjdG9yID0gTWVkaWFuX1VNSSAvIFRvdGFsUk5BLAogICAgICAgICBXVCA9IChXVCAqIE5vcm1fRmFjdG9yKSAlPiUgbG9nMTAsCiAgICAgICAgIFZBUiA9IChWQVIgKiBOb3JtX0ZhY3RvcikgJT4lIGxvZzEwKQpNZWx0LmRmMiA9IE5vcm0uZGYyICU+JSBkcGx5cjo6c2VsZWN0KENlbGwsTU9JLFdULFZBUikgJT4lIG1lbHQoaWQgPSBjKCJDZWxsIiwiTU9JIikpICU+JSBmaWx0ZXIodmFsdWUgPiAwKQoKQmFzZS5QbG90ICsgCiAgZ2VvbV92aW9saW4oZGF0YSA9IE1lbHQuZGYyICU+JSBtdXRhdGUoQ2VsbCA9IENlbGwgJT4lIHJlY29kZSgiREYxIiA9ICJERi0xIikpLAogICAgICAgICAgICAgIGFlcyh4ID0gTU9JICU+JSBmYWN0b3IsCiAgICAgICAgICAgICAgICAgIHkgPSB2YWx1ZSwKICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBpbnRlcmFjdGlvbih2YXJpYWJsZSxDZWxsLE1PSSksCiAgICAgICAgICAgICAgICAgIGZpbGwgPSBDZWxsKSwKICAgICAgICAgICAgICBzY2FsZSA9ICJhcmVhIiwKICAgICAgICAgICAgICBkcmF3X3F1YW50aWxlcyA9IDAuNSwKICAgICAgICAgICAgICBsd2QgPSAwLjgpICsKICBjb29yZF9mbGlwKCkgKwogIGxhYnMoeCA9ICJNT0kgKE5QIHVuaXRzL2NlbGwpIiwKICAgICAgIHkgPSBUZVgoIlxcdGV4dGJmeyRcXGxvZ18xXzAkIG5vcm1hbGl6ZWQgVU1JIGNvdW50cy9jZWxsfSIpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiREYtMSIgPSAiZGVlcHBpbmszIiwgIk1EQ0siID0gInNreWJsdWUiKSkKCmdnc2F2ZShmaWxlID0gIlBsb3RzL1N1cHA2RF9FeHB0Ml9XVF9WQVJfU2VwYXJhdGVkLnBkZiIsCiAgICAgICBoZWlnaHQgPSA1LAogICAgICAgd2lkdGggPSA1LAogICAgICAgdW5pdHMgPSAiaW4iKQoKbG1lcihmb3JtdWxhID0gdmFsdWUgfiB2YXJpYWJsZSArICgxfE1PSSksCiAgICAgZGF0YSA9IE1lbHQuZGYyKSAlPiUgc3VtbWFyeQoKbG1lcihmb3JtdWxhID0gVGVzdCB+IENlbGwgKiBIZWxwICsgKDF8TU9JKSwKICAgICBkYXRhID0gU3VtLmRmKSAlPiUgc3VtbWFyeQoxIC0gMTBeKC0uMjUpICM0NCUgcmVkdWN0aW9uIGluIE1EQ0sgY2VsbHMgaW4gdGhlIGFic2VuY2Ugb2YgSGVscCwKMSAtIDEwXigtLjI1ICsgLjE1KSAjMjAlIHJlZHVjdGlvbiBpbiBNRENLIGNlbGxzIGluIHRoZSBwcmVzZW5jZSBvZiBIZWxwCjEwXiguMzk2MjcpIC0gMSAjIChFZmZlY3Qgb2YgVkFSIGluIERGLTEgY2VsbHMpCgoxMF4oLjM5NjI3ICsgLjE1ODA4KSAtIDEKCjEwXiguNDUpICMgMi44LWZvbGQgaW5jcmVhc2UgZnJvbSBIZWxwZXIgaW4gREYtMSBjZWxscwoxMF4oLjQ1ICsgLjExKSAjIDMuNi1mb2xkIGluY3JlYXNlIGZyb20gSGVscGVyIGluIE1EQ0sgY2VsbHMKCmxtZXIoZm9ybXVsYSA9IFRlc3QgfiBDZWxsICogSGVscCArICgxfE1PSSksCiAgICAgZGF0YSA9IFN1bS5kZiAlPiUgZmlsdGVyKE1PSSA8IDAuNikpICU+JSBzdW1tYXJ5CgpkZjEgPSByZWFkLmNzdihmaWxlID0gZmlsZS5wYXRoKFByb2ouSG9tZSwiRGF0YSIsIjEwWF9FeHB0MV9SYXcuY3N2IiksCiAgICAgICAgIGhlYWRlciA9IFRSVUUpICU+JQogIG11dGF0ZShVTUkgPSBUb3RhbFJOQSAlPiUgbG9nMTAsCiAgICAgICAgIEhlbHAgPSAiVmlydXMgYWxvbmUiKQpkZjIgPSByZWFkLmNzdihmaWxlID0gZmlsZS5wYXRoKFByb2ouSG9tZSwiRGF0YSIsIjEwWF9FeHB0Ml9SYXcuY3N2IiksCiAgICAgICAgICAgICAgIGhlYWRlciA9IFRSVUUpICU+JQogIG11dGF0ZShVTUkgPSBUb3RhbFJOQSAlPiUgbG9nMTAsCiAgICAgICAgIEhlbHAgPSAidy8gbVZBUjIiKQpkZjMgPSByYmluZChkZjEgJT4lIGRwbHlyOjpzZWxlY3QoQ2VsbCxNT0ksVU1JLEhlbHApLAogICAgICAgICAgICBkZjIgJT4lIGRwbHlyOjpzZWxlY3QoQ2VsbCxNT0ksVU1JLEhlbHApKSAlPiUKICBtdXRhdGUoQ2VsbCA9IENlbGwgJT4lIHJlY29kZSgiREYxIiA9ICJERi0xIikpCkJhc2UuUGxvdCArCiAgZ2VvbV92aW9saW4oZGF0YSA9IGRmMywKICAgICAgICAgICAgICBhZXMoeCA9IE1PSSAlPiUgZmFjdG9yLAogICAgICAgICAgICAgICAgICB5ID0gVU1JLAogICAgICAgICAgICAgICAgICBmaWxsID0gQ2VsbCwKICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBpbnRlcmFjdGlvbihNT0ksQ2VsbCkpLAogICAgICAgICAgICAgIGRyYXdfcXVhbnRpbGVzID0gMC41LAogICAgICAgICAgICAgIGx3ZCA9IDAuOCkgKwogIGZhY2V0X3dyYXAofkhlbHApICsKICBjb29yZF9mbGlwKCkgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsbWF4KGRmMyRVTUkpKSkgKwogIGxhYnMoeCA9ICJNT0kgKE5QIHVuaXRzL2NlbGwpIiwKICAgICAgIHkgPSBUZVgoIlxcdGV4dGJmeyRcXGxvZ18xXzAkIHRvdGFsIFVNSXMvY2VsbH0iKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIkRGLTEiID0gImRlZXBwaW5rMyIsICJNRENLIiA9ICJza3libHVlIikpCgpnZ3NhdmUoZmlsZSA9ICJQbG90cy9TdXBwNkVfVG90YWxfVU1Jc19wZXJfQ2VsbC5wZGYiLAogICAgICAgaGVpZ2h0ID0gNSwKICAgICAgIHdpZHRoID0gNSwKICAgICAgIHVuaXRzID0gImluIikKCmBgYAoKYGBge3IgRmlndXJlIDd9CkZsdS5TZWdtZW50cyA9IGMoIlBCMiIsIlBCMSIsIlBBIiwiSEEiLCJOUCIsIk5BIiwiTSIsIk5TIikKCkV4cF9EdWFsX0hBID0gcmVhZC5jc3YoZmlsZSA9IGZpbGUucGF0aChQcm9qLkhvbWUsIkRhdGEiLCJQb2lzc29uX0R1YWxIQV9EYXRhLmNzdiIpLCBoZWFkZXIgPSBUUlVFKQoKU0NBID0gcmVhZC5jc3YoZmlsZS5wYXRoKFByb2ouSG9tZSwiRGF0YSIsIjdBX0RhdGEuY3N2IikpICU+JQogIG5hLm9taXQgJT4lCiAgbXV0YXRlKEhlbHBlciA9IFBCMi5IZWxwZXIgKiBQQjEuSGVscGVyLAogICAgICAgICBXVC5TZWdtZW50cyA9IFBCMiArIFBCMSArIFBBICsgSEEgKyBOUCArIE5BLiArIE0gKyBOUywKICAgICAgICAgV1QgPSBzaWduKFdULlNlZ21lbnRzKSkKClNDQSAlPiUKICBncm91cF9ieShSZXApICU+JQogIGRwbHlyOjpzdW1tYXJpc2UoV1QuQ2VsbHMgPSBzdW0oV1QpLAogICAgICAgICAgICAgICAgICAgSGVscGVyLkNlbGxzID0gc3VtKEhlbHBlcikpICU+JSAKICBmaWx0ZXIoUmVwIDw9IDQpICU+JQogIGNvbFN1bXMKCkV4cC5QcCA9IHJlYWQuY3N2KGZpbGUucGF0aChQcm9qLkhvbWUsIkRhdGEiLCI3QV9EYXRhLmNzdiIpKSAlPiUKICBuYS5vbWl0ICU+JQogIG11dGF0ZShIZWxwZXIgPSBQQjIuSGVscGVyICogUEIxLkhlbHBlciwKICAgICAgICAgV1QuU2VnbWVudHMgPSBQQjIgKyBQQjEgKyBQQSArIEhBICsgTlAgKyBOQS4gKyBNICsgTlMsCiAgICAgICAgIFdUID0gc2lnbihXVC5TZWdtZW50cykpICU+JQogIGdyb3VwX2J5KFJlcCkgJT4lCiAgZHBseXI6OnN1bW1hcmlzZShQQjIgPSBzdW0oUEIyKSwKICAgICAgICAgICAgUEIxID0gc3VtKFBCMSksCiAgICAgICAgICAgIFBBID0gc3VtKFBBKSwKICAgICAgICAgICAgSEEgPSBzdW0oSEEpLAogICAgICAgICAgICBOUCA9IHN1bShOUCksCiAgICAgICAgICAgIE5BLiA9IHN1bShOQS4pLAogICAgICAgICAgICBNID0gc3VtKE0pLAogICAgICAgICAgICBOUyA9IHN1bShOUyksCiAgICAgICAgICAgIEhlbHBlciA9IHN1bShIZWxwZXIpLAogICAgICAgICAgICBXVCA9IHN1bShXVCkpICU+JQogIG11dGF0ZShQQjIgPSAobG9nKDEgLSBQQjIgLyBIZWxwZXIpIC8gbG9nKDEgLSBXVCAvIEhlbHBlcikpICU+JSByb3VuZCgyKSwKICAgICAgICAgUEIxID0gKGxvZygxIC0gUEIxIC8gSGVscGVyKSAvIGxvZygxIC0gV1QgLyBIZWxwZXIpKSAlPiUgcm91bmQoMiksCiAgICAgICAgIFBBID0gKGxvZygxIC0gUEEgLyBIZWxwZXIpIC8gbG9nKDEgLSBXVCAvIEhlbHBlcikpICU+JSByb3VuZCgyKSwKICAgICAgICAgSEEgPSAobG9nKDEgLSBIQSAvIEhlbHBlcikgLyBsb2coMSAtIFdUIC8gSGVscGVyKSkgJT4lIHJvdW5kKDIpLAogICAgICAgICBOUCA9IChsb2coMSAtIE5QIC8gSGVscGVyKSAvIGxvZygxIC0gV1QgLyBIZWxwZXIpKSAlPiUgcm91bmQoMiksCiAgICAgICAgIE5BLiA9IChsb2coMSAtIE5BLiAvIEhlbHBlcikgLyBsb2coMSAtIFdUIC8gSGVscGVyKSkgJT4lIHJvdW5kKDIpLAogICAgICAgICBNID0gKGxvZygxIC0gTSAvIEhlbHBlcikgLyBsb2coMSAtIFdUIC8gSGVscGVyKSkgJT4lIHJvdW5kKDIpLAogICAgICAgICBOUyA9IChsb2coMSAtIE5TIC8gSGVscGVyKSAvIGxvZygxIC0gV1QgLyBIZWxwZXIpKSAlPiUgcm91bmQoMikpICU+JQogIGRwbHlyOjpzZWxlY3QoUmVwLFBCMjpOUykKCkV4cC5QcC4xID0gRXhwLlBwICU+JQogIG1lbHQoaWQudmFycyA9ICJSZXAiLAogICAgICAgdmFyaWFibGUubmFtZSA9ICJTZWdtZW50IiwKICAgICAgIHZhbHVlLm5hbWUgPSAiUHAiKSAlPiUKICBtdXRhdGUoU2VnbWVudCA9IFNlZ21lbnQgJT4lIHN0cl9yZXBsYWNlKCJOQS4iLCAiTkEiKSAlPiUgZmFjdG9yKGxldmVscyA9IEZsdS5TZWdtZW50cykpCgpFeHAuUHAuMiA9IEV4cC5QcCAlPiUKICBtdXRhdGUoUHAgPSAoUEIyICogUEIxICogUEEgKiBIQSAqIE5QICogTkEuICogTSAqIE5TKSBeICgxIC8gOCkgJT4lIHJvdW5kKDIpLAogICAgICAgICBBdmcuUHAgPSAoUEIyICsgUEIxICsgUEEgKyBIQSArIE5QICsgTkEuICsgTSArIE5TKSAvIDggJT4lIHJvdW5kKDIpKQoKRXhwLlBwLlN1bW1hcnkuMiA9IEV4cC5QcC4xICU+JQogIGdyb3VwX2J5KFJlcCkgJT4lCiAgZHBseXI6OnN1bW1hcmlzZShQcC5NZWFuID0gbWVhbihQcCksCiAgICAgICAgICAgICAgICAgICBQcC5zZCA9IHNkKFBwKSkKCkJhc2UuUGxvdCArCiAgZ2VvbV9jcm9zc2JhcihkYXRhID0gRXhwLlBwLlN1bW1hcnkuMiwKICAgICAgICAgICAgICAgIGFlcyh4ID0gUmVwLAogICAgICAgICAgICAgICAgICAgIHkgPSBQcC5NZWFuLAogICAgICAgICAgICAgICAgICAgIHltaW4gPSBQcC5NZWFuIC0gUHAuc2QsCiAgICAgICAgICAgICAgICAgICAgeW1heCA9IFBwLk1lYW4gKyBQcC5zZCksCiAgICAgICAgICAgICAgICBmaWxsID0gImRhcmtncmF5IiwKICAgICAgICAgICAgICAgIGFscGhhID0gMC41KSArCiAgZ2VvbV9qaXR0ZXIoZGF0YSA9IEV4cC5QcC4xLAogICAgICAgICAgICAgIGFlcyh4ID0gUmVwLAogICAgICAgICAgICAgICAgICB5ID0gUHAsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gU2VnbWVudCkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzPWMoMCwxLjA1KSxicmVha3M9MDo1LzUpICsKICBsYWJzKHk9ZXhwcmVzc2lvbihib2xkKHBhc3RlKCJQcm9iYWJpbGl0eSBvZiBkZXRlY3Rpb24gKFAiW2JvbGQoIlAiKV0sIikiKSkpLAogICAgICAgeD0iUmVwbGljYXRlIikgKwogIHNjYWxlX2NvbG9yX3RhYmxlYXUoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IikKCmdnc2F2ZShmaWxlID0gIlBsb3RzL01pc2M3X1BwX3ZfUmVwLnBkZiIsCiAgICAgICB3aWR0aCA9IDYsCiAgICAgICBoZWlnaHQgPSA1LAogICAgICAgdW5pdCA9ICJpbiIpCgpsbShmb3JtdWxhID0gUHAgfiBSZXAsCiAgIGRhdGEgPSBFeHAuUHAuMSAlPiUgIG11dGF0ZShSZXAgPSBSZXAgJT4lIGZhY3RvcihsZXZlbHMgPSBjKDEsMiwzLDQsNSkpKSkgJT4lIHN1bW1hcnkKCkV4cC5QcC4xID0gRXhwLlBwLjEgJT4lIGZpbHRlcihSZXAgPD0gNCkKRXhwLlBwLjIgPSBFeHAuUHAuMiAlPiUgZmlsdGVyKFJlcCA8PSA0KQoKRXhwLlBwLjEgPSBFeHAuUHAuMSAlPiUgYXJyYW5nZShSZXAsU2VnbWVudCkKRXhwLlBwLjIgPSBFeHAuUHAuMiAlPiUgYXJyYW5nZShSZXApCgpsbShmb3JtdWxhID0gUHAgfiBSZXAsCiAgIGRhdGEgPSBFeHAuUHAuMSAlPiUgIG11dGF0ZShSZXAgPSBSZXAgJT4lIGZhY3RvcihsZXZlbHMgPSBjKDEsMiwzLDQpKSkpICU+JSBzdW1tYXJ5Cgp3cml0ZS5jc3YoRXhwLlBwLjIgJT4lIGRwbHlyOjpzZWxlY3QoUmVwOk5TKSwKICAgICAgICAgIGZpbGUgPSBmaWxlLnBhdGgoUHJvai5Ib21lLCJEYXRhIiwiN0JfUHBfRGF0YS5jc3YiKSwKICAgICAgICAgIHJvdy5uYW1lcyA9IEZBTFNFKQoKRXhwLlBwLlN1bW1hcnkgPSBFeHAuUHAuMSAlPiUgCiAgZ3JvdXBfYnkoU2VnbWVudCkgJT4lCiAgZHBseXI6OnN1bW1hcmlzZShQcC5NZWFuID0gbWVhbihQcCksCiAgICAgICAgICAgIFBwLnNlID0gc2QoUHApIC8gc3FydChsZW5ndGgoUHApKSwKICAgICAgICAgICAgUHAuc2QgPSBzZChQcCksCiAgICAgICAgICAgIFBwLk1pbiA9IFBwLk1lYW4gLSBQcC5zZCwKICAgICAgICAgICAgUHAuTWF4ID0gUHAuTWVhbiArIFBwLnNkKQoKRXhwLlBwLlN1bW1hcnlbRXhwLlBwLlN1bW1hcnlbLCJQcC5NZWFuIl0gPT0gMC42MjUsIlBwLk1lYW4iXSA9IDAuNjMgIyBSIHJvdW5kcyAwLjYyNSBkb3duIHRvIDAuNjIsIHNvIHRoaXMgcm91bmRpbmcgc3RlcCBoYWQgdG8gYmUgYWRqdXN0ZWQKCgpCYXNlLlBsb3QgPSBnZ3Bsb3QoKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIkRGLTEiID0gImRlZXBwaW5rMyIsICJNRENLIiA9ICJza3libHVlIikpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJERi0xIiA9ICJkZWVwcGluazMiLCAiTURDSyIgPSAic2t5Ymx1ZSIpKSArCiAgdGhlbWUodGV4dD1lbGVtZW50X3RleHQoc2l6ZT0xNCxmYWNlPSJib2xkIiksCiAgICAgICAgc3RyaXAudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLG1hcmdpbj1tYXJnaW4oMCwwLDMsMCkpLAogICAgICAgIHN0cmlwLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSxtYXJnaW49bWFyZ2luKDAsMCwwLDApLGFuZ2xlPTApLAogICAgICAgIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpKSwKICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9MCx2anVzdD0wLHNpemU9cmVsKDEuNSksY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMubGluZS54ID0gZWxlbWVudF9saW5lKHNpemU9MC41KSwKICAgICAgICBheGlzLmxpbmUueSA9IGVsZW1lbnRfbGluZShzaXplPTAuNSksCiAgICAgICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9saW5lKHNpemU9MC41LCBjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjIpLGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuMikpLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpKQoKTGVnZW5kLlBsb3QgPSAKICBnZ3Bsb3QoKSArCiAgdGhlbWUodGV4dD1lbGVtZW50X3RleHQoc2l6ZT0xNCxmYWNlPSJib2xkIiksCiAgICAgICAgc3RyaXAudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLG1hcmdpbj1tYXJnaW4oMCwwLDMsMCkpLAogICAgICAgIHN0cmlwLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSxtYXJnaW49bWFyZ2luKDAsMCwwLDApLGFuZ2xlPTApLAogICAgICAgIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpKSwKICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9MCx2anVzdD0wLHNpemU9cmVsKDEuNSksY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSxjb2xvciA9ICJibGFjayIpLAogICAgICAgIGF4aXMubGluZS54ID0gZWxlbWVudF9saW5lKHNpemU9MC41KSwKICAgICAgICBheGlzLmxpbmUueSA9IGVsZW1lbnRfbGluZShzaXplPTAuNSksCiAgICAgICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9saW5lKHNpemU9MC41KSwKICAgICAgICBheGlzLnRpY2tzLnkgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuMiksY29sb3IgPSAiYmxhY2siKSwKICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS4yKSksCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCkpCgpFeHAuUHAuMSAlPiUgZ3JvdXBfYnkoUmVwKSAlPiUKICBkcGx5cjo6c3VtbWFyaXNlKEF2ZyA9IHByb2QoUHApIF4gKDEgLyA4KSkgJT4lCiAgdW5ncm91cCAlPiUKICBkcGx5cjo6c3VtbWFyaXNlKFBwLk1lYW4gPSBtZWFuKEF2ZyksCiAgICAgICAgICAgIFBwLnNkID0gc2QoQXZnKSwKICAgICAgICAgICAgUHAuTWF4ID0gUHAuTWVhbiArIFBwLnNkLAogICAgICAgICAgICBQcC5NaW4gPSBQcC5NZWFuIC0gUHAuc2QpCgpCYXNlLlBsb3QgKwogIGdlb21fY3Jvc3NiYXIoZGF0YSA9IEV4cC5QcC5TdW1tYXJ5LAogICAgICAgICAgICAgICAgYWVzKHggPSBTZWdtZW50LAogICAgICAgICAgICAgICAgICAgIHkgPSBQcC5NZWFuLAogICAgICAgICAgICAgICAgICAgIHltaW4gPSBQcC5NaW4sCiAgICAgICAgICAgICAgICAgICAgeW1heCA9IFBwLk1heCksCiAgICAgICAgICAgICAgICBmaWxsID0gImRhcmtncmF5IiwKICAgICAgICAgICAgICAgIGFscGhhID0gMC41KSArCiAgZ2VvbV9qaXR0ZXIoZGF0YSA9IEV4cC5QcC4xLAogICAgICAgICAgICAgYWVzKHggPSBTZWdtZW50LAogICAgICAgICAgICAgICAgIHkgPSBQcCwKICAgICAgICAgICAgICAgICBjb2xvciA9IGZhY3RvcihSZXApKSwKICAgICAgICAgICAgIHdpZHRoID0gMC4zLAogICAgICAgICAgICAgc2l6ZSA9IDIpICsKICBnZW9tX3RleHQoZGF0YSA9IEV4cC5QcC5TdW1tYXJ5LAogICAgICAgICAgICBhZXMoeCA9IFNlZ21lbnQsCiAgICAgICAgICAgICAgICBsYWJlbCA9IFBwLk1lYW4gJT4lIHJvdW5kKDIpKSwKICAgICAgICAgICAgc2l6ZSA9IDUsCiAgICAgICAgICAgIGZvbnRmYWNlID0gImJvbGQiLAogICAgICAgICAgICB5ID0gLjA1KSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cz1jKDAsMS4wNSksYnJlYWtzPTA6NS81KSArCiAgYW5ub3RhdGUoInRleHQiLHggPSAzLCB5ID0gMSwgc2l6ZSA9IDUsbGFiZWwgPSBUZVgoIlxcdGV4dGJmeyRQX1AkID0gMC42NSAoMC42MCAtIDAuNzApfSIpKSArCiAgbGFicyh5PWV4cHJlc3Npb24oYm9sZChwYXN0ZSgiUHJvYmFiaWxpdHkgb2YgZGV0ZWN0aW9uIChQIltib2xkKCJQIildLCIpIikpKSwKICAgICAgIHg9IlNlZ21lbnQiLAogICAgICAgY29sb3I9IlJlcGxpY2F0ZSIpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiMSIgPSAiIzRFN0E5NyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIiNGMjhFMkIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiA9ICIjNTlBMTRGIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiIzk2NEIwMCIpKSArCiAgZ3VpZGVzKGNvbG9yID0gRkFMU0UpCgpnZ3NhdmUoZmlsZSA9ICJQbG90cy83QV9QcF92X1NlZ21lbnQucGRmIiwKICAgICAgIHdpZHRoID0gNSwKICAgICAgIGhlaWdodCA9IDUsCiAgICAgICB1bml0ID0gImluIikKCkxlZ2VuZC43QSA9IExlZ2VuZC5QbG90ICsKICBnZW9tX2Nyb3NzYmFyKGRhdGEgPSBFeHAuUHAuU3VtbWFyeSwKICAgICAgICAgICAgICAgIGFlcyh4ID0gU2VnbWVudCwKICAgICAgICAgICAgICAgICAgICB5ID0gUHAuTWVhbiwKICAgICAgICAgICAgICAgICAgICB5bWluID0gUHAuTWluLAogICAgICAgICAgICAgICAgICAgIHltYXggPSBQcC5NYXgpLAogICAgICAgICAgICAgICAgZmlsbCA9ICJkYXJrZ3JheSIsCiAgICAgICAgICAgICAgICBhbHBoYSA9IDAuNSkgKwogIGdlb21faml0dGVyKGRhdGEgPSBFeHAuUHAuMSwKICAgICAgICAgICAgICBhZXMoeCA9IFNlZ21lbnQsCiAgICAgICAgICAgICAgICAgIHkgPSBQcCwKICAgICAgICAgICAgICAgICAgY29sb3IgPSBmYWN0b3IoUmVwKSksCiAgICAgICAgICAgICAgd2lkdGggPSAwLjMsCiAgICAgICAgICAgICAgc2l6ZSA9IDIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzPWMoMCwxLjA1KSxicmVha3M9MDo1LzUpICsKICBhbm5vdGF0ZSgidGV4dCIseCA9IDMsIHkgPSAxLCBzaXplID0gNSxsYWJlbCA9IFRlWCgiXFx0ZXh0YmZ7JFBfUCQgPSAwLjY1ICgwLjYwIC0gMC43MCl9IikpICsKICBsYWJzKHk9ZXhwcmVzc2lvbihib2xkKHBhc3RlKCJQcm9iYWJpbGl0eSBvZiBkZXRlY3Rpb24gKFAiW2JvbGQoIlAiKV0sIikiKSkpLAogICAgICAgeD0iU2VnbWVudCIsCiAgICAgICBjb2xvcj0iUmVwbGljYXRlIikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIxIiA9ICIjNEU3QTk3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiI0YyOEUyQiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiID0gIiM1OUExNEYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICIjOTY0QjAwIikpCgpnZ3NhdmUoZ19sZWdlbmQoTGVnZW5kLjdBKSwKICAgICAgIGZpbGUgPSAiUGxvdHMvTGVnZW5kXzdBLnBkZiIsCiAgICAgICBoZWlnaHQgPSAzLAogICAgICAgd2lkdGggPSAyLAogICAgICAgdW5pdHMgPSAiaW4iKQoKCiMgU2ltdWxhdGlvbiAtLS0tCgpDZWxsSW5mZWN0aW9uPWZ1bmN0aW9uKENlbGwuTnVtLE1PSSxDZWxsLlR5cGUsUHApIHsKCiAgc2V0LnNlZWQoNjY2KSAjCgogIENlbGwuTmFtZXMgPSBjKAogICAgIk1PSSIsIkNlbGwuVHlwZSIsCiAgICAiQ2VsbCIsIkluZmVjdGVkIiwiQ28uSW5mZWN0ZWQiLCJQcm9kdWN0aXZlIiwiUHJvZHVjdGl2ZS5Dby5JbmZlY3RlZCIsIlBvbHkiLCJTdXJmYWNlLkhBIiwiSW5mLkEiLCJJbmYuQiIsCiAgICAicFBhcmVudC5BIiwicFBhcmVudC5CIiwicFJlYXNzb3J0IiwicEhOLlJlYXNzb3J0IiwKICAgICJQQjIiLCJQQjEiLCJQQSIsIkhBIiwiTlAiLCJOQSIsIk0iLCJOUyIsCiAgICAiQS5QQjIiLCJBLlBCMSIsIkEuUEEiLCJBLkhBIiwiQS5OUCIsIkEuTkEiLCJBLk0iLCJBLk5TIiwKICAgICJCLlBCMiIsIkIuUEIxIiwiQi5QQSIsIkIuSEEiLCJCLk5QIiwiQi5OQSIsIkIuTSIsIkIuTlMiLAogICAgIkNvcHkuQS5QQjIiLCJDb3B5LkEuUEIxIiwiQ29weS5BLlBBIiwiQ29weS5BLkhBIiwiQ29weS5BLk5QIiwiQ29weS5BLk5BIiwiQ29weS5BLk0iLCJDb3B5LkEuTlMiLAogICAgIkNvcHkuQi5QQjIiLCJDb3B5LkIuUEIxIiwiQ29weS5CLlBBIiwiQ29weS5CLkhBIiwiQ29weS5CLk5QIiwiQ29weS5CLk5BIiwiQ29weS5CLk0iLCJDb3B5LkIuTlMiLAogICAgIkNvcHkuUEIyIiwiQ29weS5QQjEiLCJDb3B5LlBBIiwiQ29weS5IQSIsIkNvcHkuTlAiLCJDb3B5Lk5BIiwiQ29weS5NIiwiQ29weS5OUyIsCiAgICAiU2l4IiwiSEEuTmVnIiwiTlMuTmVnIgogICkKICBDZWxscyA9IG1hdHJpeChucm93ID0gQ2VsbC5OdW0sCiAgICAgICAgICAgICAgICAgbmNvbCA9IGxlbmd0aChDZWxsLk5hbWVzKSwKICAgICAgICAgICAgICAgICBkYXRhID0gMCkKCiAgY29sbmFtZXMoQ2VsbHMpID0gQ2VsbC5OYW1lcwoKICBDZWxsc1ssICJDZWxsIl0gPSBzZXEoMSwgQ2VsbC5OdW0pCiAgQ2VsbHNbLCAiTU9JIl0gPSBNT0kKCiAgd2l0aEEgPSBzb3J0KGNlaWxpbmcocnVuaWYobiA9IE1PSSAqIENlbGwuTnVtKSAqIENlbGwuTnVtKSkKICB3aXRoQiA9IHNvcnQoY2VpbGluZyhydW5pZihuID0gTU9JICogQ2VsbC5OdW0pICogQ2VsbC5OdW0pKQoKICB4ID0gdGFibGUod2l0aEEpCiAgeF9pbmRleCA9IGFzLm51bWVyaWMobmFtZXMoeCkpCiAgeF92YWx1ZXMgPSBhcy5udW1lcmljKHgpCiAgQ2VsbHNbeF9pbmRleCwgIkluZi5BIl0gPSB4X3ZhbHVlcwoKICB4ID0gdGFibGUod2l0aEIpCiAgeF9pbmRleCA9IGFzLm51bWVyaWMobmFtZXMoeCkpCiAgeF92YWx1ZXMgPSBhcy5udW1lcmljKHgpCiAgQ2VsbHNbeF9pbmRleCwgIkluZi5CIl0gPSB4X3ZhbHVlcwoKICBDZWxsc1ssICJDby5JbmZlY3RlZCJdID0gKENlbGxzWywgIkluZi5BIl0gKiBDZWxsc1ssICJJbmYuQiJdID4gMCkKICBDZWxsc1ssICJJbmZlY3RlZCJdID0gKENlbGxzWywgIkluZi5BIl0gKyBDZWxsc1ssICJJbmYuQiJdID4gMCkKICBDZWxsc1ssICJwUGFyZW50LkEiXSA9IDEKICBDZWxsc1ssICJwUGFyZW50LkIiXSA9IDEKICBDZWxsc1ssICJwSE4uUmVhc3NvcnQiXSA9IDEKCiAgQS5QQjIuSW5kZXggPSB3aGljaCgoY29sbmFtZXMoQ2VsbHMpKSA9PSAiQS5QQjIiKQogIFBCMi5JbmRleCA9IHdoaWNoKChjb2xuYW1lcyhDZWxscykpID09ICJQQjIiKQoKICBmb3IgKHNlZ21lbnQgaW4gMTo4KSB7CiAgICB4ID0gdGFibGUoc29ydChzYW1wbGUoCiAgICAgIHdpdGhBLAogICAgICBzaXplID0gbGVuZ3RoKHdpdGhBKSAqIFBwW3NlZ21lbnRdLAogICAgICByZXBsYWNlID0gRkFMU0UKICAgICkpKQogICAgeF9pbmRleCA9IGFzLm51bWVyaWMobmFtZXMoeCkpCiAgICB4X3ZhbHVlcyA9IGFzLm51bWVyaWMoeCkKCiAgICBDZWxsc1t4X2luZGV4LCBBLlBCMi5JbmRleCArIHNlZ21lbnQgLSAxXSA9IHhfdmFsdWVzID4gMCAgICAgI0Jvb2xlYW4gUHJlc2VuY2UvQWJzZW5jZSBvZiBTZWdtZW50LCBBIHN0cmFpbgogICAgQ2VsbHNbeF9pbmRleCwgQS5QQjIuSW5kZXggKyBzZWdtZW50IC0gMSArIDE2XSA9IHhfdmFsdWVzICAgICAjQ29weSBOdW1iZXIgb2YgZWFjaCBzZWdtZW50LCBBIHN0cmFpbgoKICAgIHggPSB0YWJsZShzb3J0KHNhbXBsZSgKICAgICAgd2l0aEIsCiAgICAgIHNpemUgPSBsZW5ndGgod2l0aEIpICogUHBbc2VnbWVudF0sCiAgICAgIHJlcGxhY2UgPSBGQUxTRQogICAgKSkpCiAgICB4X2luZGV4ID0gYXMubnVtZXJpYyhuYW1lcyh4KSkKICAgIHhfdmFsdWVzID0gYXMubnVtZXJpYyh4KQoKICAgIENlbGxzW3hfaW5kZXgsIEEuUEIyLkluZGV4ICsgc2VnbWVudCAtIDEgKyA4XSA9IHhfdmFsdWVzID4gMCAgICAgI0Jvb2xlYW4gUHJlc2VuY2UvQWJzZW5jZSBvZiBTZWdtZW50LCBCIHN0cmFpbgogICAgQ2VsbHNbeF9pbmRleCwgQS5QQjIuSW5kZXggKyBzZWdtZW50IC0gMSArIDE2ICsgOF0gPSB4X3ZhbHVlcyAgICAgI0NvcHkgTnVtYmVyIG9mIGVhY2ggc2VnbWVudCwgQiBzdHJhaW4KCiAgICBDZWxsc1ssIEEuUEIyLkluZGV4ICsgc2VnbWVudCAtIDEgKyAxNiArIDggKyA4XSA9IENlbGxzWywgQS5QQjIuSW5kZXggKyBzZWdtZW50IC0gMSArIDE2XSArIENlbGxzWywgQS5QQjIuSW5kZXggKyBzZWdtZW50IC0gMSArIDE2ICsgOF0gI0NvcHkgbnVtYmVyIG9mIGVhY2ggc2VnbWVudCwgaXJyZXNwZWN0aXZlIG9mIHNvdXJjZQogICAgQ2VsbHNbLCBQQjIuSW5kZXggKyBzZWdtZW50IC0gMV0gPSAoQ2VsbHNbLCBBLlBCMi5JbmRleCArIHNlZ21lbnQgLSAxXSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENlbGxzWywgQS5QQjIuSW5kZXggKyBzZWdtZW50IC0gMSArIDhdKSA+IDAgICNQcmVzZW5jZS9BYnNlbmNlIG9mIEdlbmUsIGlycmVzcGVjdGl2ZSBvZiBzb3VyY2UKCiAgICBDZWxsc1ssICJwUGFyZW50LkEiXSA9IENlbGxzWywgInBQYXJlbnQuQSJdICogKENlbGxzWywgQS5QQjIuSW5kZXggKyBzZWdtZW50IC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICsgMTZdIC8gQ2VsbHNbLCBBLlBCMi5JbmRleCArIHNlZ21lbnQgLSAxICsgMTYgKyA4ICsgOF0pCiAgICBDZWxsc1ssICJwUGFyZW50LkIiXSA9IENlbGxzWywgInBQYXJlbnQuQiJdICogKENlbGxzWywgQS5QQjIuSW5kZXggKyBzZWdtZW50IC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICsgMTYgKyA4XSAvIENlbGxzWywgQS5QQjIuSW5kZXggKyBzZWdtZW50IC0gMSArIDE2ICsgOCArIDhdKQogIH0KCiAgQ2VsbHNbLCAiUG9seSJdID0gQ2VsbHNbLCAiUEIyIl0gKiBDZWxsc1ssICJQQjEiXSAqIENlbGxzWywgIlBBIl0gKiBDZWxsc1ssICJOUCJdCiAgQ2VsbHNbLCAiU3VyZmFjZS5IQSJdID0gQ2VsbHNbLCAiUG9seSJdICogQ2VsbHNbLCAiSEEiXQogIENlbGxzWywgIlByb2R1Y3RpdmUiXSA9IENlbGxzWywgIlN1cmZhY2UuSEEiXSAqIENlbGxzWywgIk0iXSAqIENlbGxzWywgIk5TIl0gKgogICAgQ2VsbHNbLCAiTkEiXQogIENlbGxzWywgIlByb2R1Y3RpdmUuQ28uSW5mZWN0ZWQiXSA9IENlbGxzWywgIlByb2R1Y3RpdmUiXSAqIENlbGxzWywgIkNvLkluZmVjdGVkIl0KICBDZWxsc1ssICJwUmVhc3NvcnQiXSA9IDEgLQogICAgQ2VsbHNbLCAicFBhcmVudC5BIl0gLQogICAgQ2VsbHNbLCAicFBhcmVudC5CIl0KICBDZWxsc1ssICJwSE4uUmVhc3NvcnQiXSA9IDEgLQogICAgKENlbGxzWywgIkNvcHkuQS5IQSJdIC8gQ2VsbHNbLCAiQ29weS5IQSJdKSAqIChDZWxsc1ssICJDb3B5LkEuTkEiXSAvIENlbGxzWywgIkNvcHkuTkEiXSkgLQogICAgKENlbGxzWywgIkNvcHkuQi5IQSJdIC8gQ2VsbHNbLCAiQ29weS5IQSJdKSAqIChDZWxsc1ssICJDb3B5LkIuTkEiXSAvIENlbGxzWywgIkNvcHkuTkEiXSkKCiAgQ2VsbHMKfQoKClBwID0gRXhwLlBwLjIgJT4lIGRwbHlyOjpzZWxlY3QoUEIyOk5TKSAlPiUgYXMubWF0cml4ClJlcC5OdW0gPSBucm93KEV4cC5QcC4yKQpyb3duYW1lcyhQcCkgPSBhcy5jaGFyYWN0ZXIoMTpSZXAuTnVtKQoKTU9JID0gbWF0cml4KGRhdGEgPSByZXAoYyguMDAxLC4wMSwuMDUsLjEsLjIsLjMsLjQsLjUsLjYsLjcsLjgsLjksMSwxLjUsMiw1LDEwKSwgUmVwLk51bSksICNSYW5nZSBvZiBNT0lzCiAgICAgICAgICAgYnlyb3cgPSBUUlVFLCBucm93ID0gUmVwLk51bSkKCnJvd25hbWVzKE1PSSkgPSBFeHAuUHAuMiRSZXAKTU9JLk51bSA9IG5jb2woTU9JKQoKQ2VsbC5OdW0gPSAxMDAwMDAgIyBVc3VhbGx5IGlub2N1bGF0ZSAxLDAwMCwwMDAgY2VsbHMsIGJ1dCBzaW1pbGFyIHJlc3VsdHMgb2J0YWluZWQgYnkgc2ltdWxhdGluZyAxMDAsMDAwIGNlbGxzCkJ1cnN0LlNpemUgPSA5NjcKIyMjIEluaXRpYWxpemUgU3VtbWFyeSBEYXRhIEZyYW1lIC0tLS0KCkNlbGwuU3VtbWFyeS5OYW1lcyA9IGMoCiAgIyBNb2RlbCBQYXJhbWV0ZXJzCiAgIlJlcCIsIk1PSSIsCgogICMgT3V0Y29tZXMKICAiUHJvZHVjdGl2ZSIsICJQcm9kdWN0aXZlLkNvLkluZmVjdGVkIiwiRXhwcmVzc2luZy5IQSIsCiAgIlZpcmlvbi5OdW1iZXIiLCJQYXJlbnQuQS5QZXJjZW50IiwiUGFyZW50LkIuUGVyY2VudCIsIlJlYXNzb3J0YW50LlBlcmNlbnQiLCJSZWFzc29ydGFudC5ITi5QZXJjZW50IiwKICAiUGFyZW50LkEuTnVtYmVyIiwiUGFyZW50LkIuTnVtYmVyIiwiUmVhc3NvcnRhbnQuTnVtYmVyIiwiUmVhc3NvcnRhbnQuSE4uTnVtYmVyIgopCgpDZWxsLlN1bW1hcnkgPSBtYXRyaXgobnJvdyA9IChNT0kuTnVtICogUmVwLk51bSksCiAgICAgICAgICAgICAgICAgICAgbmNvbCA9IGxlbmd0aChDZWxsLlN1bW1hcnkuTmFtZXMpLAogICAgICAgICAgICAgICAgICAgIGRhdGEgPSAwKQoKY29sbmFtZXMoQ2VsbC5TdW1tYXJ5KSA9IENlbGwuU3VtbWFyeS5OYW1lcwpDZWxsLlN1bW1hcnkgPSBhcy5kYXRhLmZyYW1lKENlbGwuU3VtbWFyeSkKQ2VsbC5TdW1tYXJ5JFJlcCA9IHJvd25hbWVzKFBwKQoKQ29tcGxldGUuU3VtbWFyeSA9IENlbGwuU3VtbWFyeVsxOk1PSS5OdW0sXQoKU3VtbWFyeS5JbmRleCA9IDEKClBwCgojIEV4ZWN1dGUgU2ltdWxhdGlvbiAtLS0tClNpbS5TdGFydCA9IFN5cy50aW1lKCkKCmZvciAobW9pIGluIDE6TU9JLk51bSkgewogIGZvciAoY2VsbCBpbiAxOlJlcC5OdW0pIHsKCiAgICBJbmZlY3RlZC5DZWxscyA9IENlbGxJbmZlY3Rpb24oTU9JID0gTU9JW2NlbGwsIG1vaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2VsbC5OdW0gPSBDZWxsLk51bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcCA9IFBwW2NlbGwsXSkKCiAgICBDZWxsLlN1bW1hcnlbU3VtbWFyeS5JbmRleCwiUHJvZHVjdGl2ZSJdID0gIG1lYW4oSW5mZWN0ZWQuQ2VsbHNbLCJQcm9kdWN0aXZlIl0pICogMTAwCiAgICBDZWxsLlN1bW1hcnlbU3VtbWFyeS5JbmRleCwiUHJvZHVjdGl2ZS5Dby5JbmZlY3RlZCJdID0gbWVhbihJbmZlY3RlZC5DZWxsc1ssIlByb2R1Y3RpdmUuQ28uSW5mZWN0ZWQiXSkgKiAxMDAKICAgIENlbGwuU3VtbWFyeVtTdW1tYXJ5LkluZGV4LCJFeHByZXNzaW5nLkhBIl0gPSBtZWFuKEluZmVjdGVkLkNlbGxzWywiU3VyZmFjZS5IQSJdKSAqIDEwMAogICAgQ2VsbC5TdW1tYXJ5W1N1bW1hcnkuSW5kZXgsIlJlcCJdID0gcm93bmFtZXMoUHApW2NlbGxdCiAgICBDZWxsLlN1bW1hcnlbU3VtbWFyeS5JbmRleCwiTU9JIl0gPSBNT0lbY2VsbCxtb2ldCiAgICBDZWxsLlN1bW1hcnlbU3VtbWFyeS5JbmRleCwiVmlyaW9uLk51bWJlciJdID0gQnVyc3QuU2l6ZSAqIENlbGwuU3VtbWFyeVtTdW1tYXJ5LkluZGV4LCJQcm9kdWN0aXZlIl0KCiAgICBJbmZlY3RlZC5DZWxscz1JbmZlY3RlZC5DZWxsc1tJbmZlY3RlZC5DZWxsc1ssIlByb2R1Y3RpdmUiXT09MSwsZHJvcD1GQUxTRV0KICAgIENlbGwuU3VtbWFyeVtTdW1tYXJ5LkluZGV4LCJQYXJlbnQuQS5QZXJjZW50Il0gPSBtZWFuKEluZmVjdGVkLkNlbGxzWywicFBhcmVudC5BIl0pICogMTAwCiAgICBDZWxsLlN1bW1hcnlbU3VtbWFyeS5JbmRleCwiUGFyZW50LkIuUGVyY2VudCJdID0gbWVhbihJbmZlY3RlZC5DZWxsc1ssInBQYXJlbnQuQiJdKSAqIDEwMAogICAgQ2VsbC5TdW1tYXJ5W1N1bW1hcnkuSW5kZXgsIlJlYXNzb3J0YW50LlBlcmNlbnQiXSA9IG1lYW4oSW5mZWN0ZWQuQ2VsbHNbLCJwUmVhc3NvcnQiXSkgKiAxMDAKICAgIENlbGwuU3VtbWFyeVtTdW1tYXJ5LkluZGV4LCJSZWFzc29ydGFudC5ITi5QZXJjZW50Il0gPSBtZWFuKEluZmVjdGVkLkNlbGxzWywicEhOLlJlYXNzb3J0Il0pICogMTAwCgogICAgQ2VsbC5TdW1tYXJ5W1N1bW1hcnkuSW5kZXgsIlBhcmVudC5BLk51bWJlciJdID0gQ2VsbC5TdW1tYXJ5W1N1bW1hcnkuSW5kZXgsIlBhcmVudC5BLlBlcmNlbnQiXSAqIENlbGwuU3VtbWFyeVtTdW1tYXJ5LkluZGV4LCJWaXJpb24uTnVtYmVyIl0KICAgIENlbGwuU3VtbWFyeVtTdW1tYXJ5LkluZGV4LCJQYXJlbnQuQi5OdW1iZXIiXSA9IENlbGwuU3VtbWFyeVtTdW1tYXJ5LkluZGV4LCJQYXJlbnQuQi5QZXJjZW50Il0gKiBDZWxsLlN1bW1hcnlbU3VtbWFyeS5JbmRleCwiVmlyaW9uLk51bWJlciJdCiAgICBDZWxsLlN1bW1hcnlbU3VtbWFyeS5JbmRleCwiUmVhc3NvcnRhbnQuTnVtYmVyIl0gPSBDZWxsLlN1bW1hcnlbU3VtbWFyeS5JbmRleCwiUmVhc3NvcnRhbnQuUGVyY2VudCJdICogQ2VsbC5TdW1tYXJ5W1N1bW1hcnkuSW5kZXgsIlZpcmlvbi5OdW1iZXIiXQogICAgQ2VsbC5TdW1tYXJ5W1N1bW1hcnkuSW5kZXgsIlJlYXNzb3J0YW50LkhOLk51bWJlciJdID0gQ2VsbC5TdW1tYXJ5W1N1bW1hcnkuSW5kZXgsIlJlYXNzb3J0YW50LkhOLlBlcmNlbnQiXSAqIENlbGwuU3VtbWFyeVtTdW1tYXJ5LkluZGV4LCJWaXJpb24uTnVtYmVyIl0KCiAgICBTdW1tYXJ5LkluZGV4PVN1bW1hcnkuSW5kZXgrMQogIH0KCiAgSW5mZWN0ZWQuQ2VsbHMgPSBDZWxsSW5mZWN0aW9uKE1PSSA9IE1PSVsxLG1vaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENlbGwuTnVtID0gQ2VsbC5OdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBwID0gcmVwKDEsOCkpCgogIENvbXBsZXRlLlN1bW1hcnlbbW9pLCJQcm9kdWN0aXZlIl0gPSAgbWVhbihJbmZlY3RlZC5DZWxsc1ssIlByb2R1Y3RpdmUiXSkgKiAxMDAKICBDb21wbGV0ZS5TdW1tYXJ5W21vaSwiUHJvZHVjdGl2ZS5Dby5JbmZlY3RlZCJdID0gbWVhbihJbmZlY3RlZC5DZWxsc1ssIlByb2R1Y3RpdmUuQ28uSW5mZWN0ZWQiXSkgKiAxMDAKICBDb21wbGV0ZS5TdW1tYXJ5W21vaSwiRXhwcmVzc2luZy5IQSJdID0gbWVhbihJbmZlY3RlZC5DZWxsc1ssIlN1cmZhY2UuSEEiXSkgKiAxMDAKICBDb21wbGV0ZS5TdW1tYXJ5W21vaSwiUmVwIl0gPSAxCiAgQ29tcGxldGUuU3VtbWFyeVttb2ksIk1PSSJdID0gTU9JW2NlbGwsbW9pXQogIENvbXBsZXRlLlN1bW1hcnlbbW9pLCJWaXJpb24uTnVtYmVyIl0gPSBCdXJzdC5TaXplICogQ2VsbC5TdW1tYXJ5W1N1bW1hcnkuSW5kZXgsIlByb2R1Y3RpdmUiXQoKICBJbmZlY3RlZC5DZWxscz1JbmZlY3RlZC5DZWxsc1tJbmZlY3RlZC5DZWxsc1ssIlByb2R1Y3RpdmUiXT09MSwsZHJvcD1GQUxTRV0KICBDb21wbGV0ZS5TdW1tYXJ5W21vaSwiUGFyZW50LkEuUGVyY2VudCJdID0gbWVhbihJbmZlY3RlZC5DZWxsc1ssInBQYXJlbnQuQSJdKSAqIDEwMAogIENvbXBsZXRlLlN1bW1hcnlbbW9pLCJQYXJlbnQuQi5QZXJjZW50Il0gPSBtZWFuKEluZmVjdGVkLkNlbGxzWywicFBhcmVudC5CIl0pICogMTAwCiAgQ29tcGxldGUuU3VtbWFyeVttb2ksIlJlYXNzb3J0YW50LlBlcmNlbnQiXSA9IG1lYW4oSW5mZWN0ZWQuQ2VsbHNbLCJwUmVhc3NvcnQiXSkgKiAxMDAKICBDb21wbGV0ZS5TdW1tYXJ5W21vaSwiUmVhc3NvcnRhbnQuSE4uUGVyY2VudCJdID0gbWVhbihJbmZlY3RlZC5DZWxsc1ssInBITi5SZWFzc29ydCJdKSAqIDEwMAoKICBDb21wbGV0ZS5TdW1tYXJ5W21vaSwiUGFyZW50LkEuTnVtYmVyIl0gPSBDZWxsLlN1bW1hcnlbU3VtbWFyeS5JbmRleCwiUGFyZW50LkEuUGVyY2VudCJdICogQ2VsbC5TdW1tYXJ5W1N1bW1hcnkuSW5kZXgsIlZpcmlvbi5OdW1iZXIiXQogIENvbXBsZXRlLlN1bW1hcnlbbW9pLCJQYXJlbnQuQi5OdW1iZXIiXSA9IENlbGwuU3VtbWFyeVtTdW1tYXJ5LkluZGV4LCJQYXJlbnQuQi5QZXJjZW50Il0gKiBDZWxsLlN1bW1hcnlbU3VtbWFyeS5JbmRleCwiVmlyaW9uLk51bWJlciJdCiAgQ29tcGxldGUuU3VtbWFyeVttb2ksIlJlYXNzb3J0YW50Lk51bWJlciJdID0gQ2VsbC5TdW1tYXJ5W1N1bW1hcnkuSW5kZXgsIlJlYXNzb3J0YW50LlBlcmNlbnQiXSAqIENlbGwuU3VtbWFyeVtTdW1tYXJ5LkluZGV4LCJWaXJpb24uTnVtYmVyIl0KICBDb21wbGV0ZS5TdW1tYXJ5W21vaSwiUmVhc3NvcnRhbnQuSE4uTnVtYmVyIl0gPSBDZWxsLlN1bW1hcnlbU3VtbWFyeS5JbmRleCwiUmVhc3NvcnRhbnQuSE4uUGVyY2VudCJdICogQ2VsbC5TdW1tYXJ5W1N1bW1hcnkuSW5kZXgsIlZpcmlvbi5OdW1iZXIiXQp9CgpTaW0uRW5kID0gU3lzLnRpbWUoKQpTaW0uVGltZSA9IFNpbS5FbmQgLSBTaW0uU3RhcnQKClNpbS5UaW1lCgp3cml0ZS5jc3YoQ2VsbC5TdW1tYXJ5ICU+JSBkcGx5cjo6c2VsZWN0KFJlcCwgTU9JLCBFeHByZXNzaW5nLkhBLCBSZWFzc29ydGFudC5QZXJjZW50KSwgZmlsZSA9IGZpbGUucGF0aChQcm9qLkhvbWUsIkRhdGEiLCI3Ql9TaW1fRGF0YS5jc3YiKSwgcm93Lm5hbWVzID0gRkFMU0UpCndyaXRlLmNzdihDb21wbGV0ZS5TdW1tYXJ5ICU+JSBkcGx5cjo6c2VsZWN0KFJlcCwgTU9JLCBFeHByZXNzaW5nLkhBLCBSZWFzc29ydGFudC5QZXJjZW50KSwgZmlsZSA9IGZpbGUucGF0aChQcm9qLkhvbWUsIkRhdGEiLCJQUF8xX1JlYXNzb3J0bWVudC5jc3YiKSwgcm93Lm5hbWVzID0gRkFMU0UpCgojIFBsb3QgU2ltdWxhdGlvbiBSZXN1bHRzIC0tLS0KCkNlbGwuU3VtbWFyeSA9IHJlYWQuY3N2KGZpbGUgPSBmaWxlLnBhdGgoUHJvai5Ib21lLCJEYXRhIiwiN0JfU2ltX0RhdGEuY3N2IiksIGhlYWRlciA9IFRSVUUpICU+JSAKICBuYS5vbWl0ClBQMV9SZWFzc29ydG1lbnQgPSByZWFkLmNzdihmaWxlID0gZmlsZS5wYXRoKFByb2ouSG9tZSwiRGF0YSIsIlBQMV9SZWFzc29ydG1lbnQuY3N2IiksIGhlYWRlciA9IFRSVUUpCgpLUDQgPSByZWFkLmNzdihmaWxlID0gZmlsZS5wYXRoKFByb2ouSG9tZSwiRGF0YSIsIjFDX0RhdGEuY3N2IiksIGhlYWRlciA9IFRSVUUpICU+JQogIGRwbHlyOjptdXRhdGUoQ2VsbCA9IENlbGwgJT4lIHN0cl9yZXBsYWNlKCJERjEiLCJERi0xIiksCiAgICAgICAgICAgICAgICBWaXJ1c19DZWxsID0gc3RyX2MoVmlydXMsIiBpbiAiLCBDZWxsKSwKICAgICAgICAgICAgICAgIFZpcnVzX0NlbGwgPSBWaXJ1c19DZWxsICU+JSBmYWN0b3IobGV2ZWxzID0gYygiR0ZISzk5IGluIE1EQ0siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHRkhLOTkgaW4gREYtMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5MMDkgaW4gTURDSyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hTU45OSBpbiBNRENLIikpKSAlPiUKICBuYS5vbWl0CgpCYXNlLlBsb3QgKwogIGdlb21fbGluZShkYXRhID0gUFAxX1JlYXNzb3J0bWVudCwgCiAgICAgICAgICAgIGFlcyh4ID0gRXhwcmVzc2luZy5IQSwgCiAgICAgICAgICAgICAgICB5ID0gUmVhc3NvcnRhbnQuUGVyY2VudCksIAogICAgICAgICAgICBsdHkgPSAyLCAKICAgICAgICAgICAgbHdkID0gMSkgKwogIGdlb21fbGluZShkYXRhID0gQ2VsbC5TdW1tYXJ5LAogICAgICAgICAgICBhZXMoeSA9IFJlYXNzb3J0YW50LlBlcmNlbnQsCiAgICAgICAgICAgICAgICB4ID0gRXhwcmVzc2luZy5IQSwKICAgICAgICAgICAgICAgIGdyb3VwID0gYXMuZmFjdG9yKFJlcCksCiAgICAgICAgICAgICAgICBjb2xvciA9IGFzLmZhY3RvcihSZXApKSwKICAgICAgICAgICAgbHdkID0gMS4yKSArCiAgZ2VvbV9wb2ludChkYXRhID0gS1A0ICU+JSBmaWx0ZXIoVmlydXNfQ2VsbCA9PSAiR0ZISzk5IGluIERGLTEiKSwKICAgICAgICAgICAgIGFlcyh4ID0gRXhwcmVzc2luZ19IQSwKICAgICAgICAgICAgICAgICB5ID0gUmVhc3NvcnRtZW50KSwKICAgICAgICAgICAgIGNvbG9yID0gImRlZXBwaW5rMyIsCiAgICAgICAgICAgICBzaXplID0gMi41KSArCiAgZ2VvbV9wb2ludChkYXRhID0gS1A0ICU+JSBmaWx0ZXIoVmlydXNfQ2VsbCA9PSAiR0ZISzk5IGluIE1EQ0siKSwKICAgICAgICAgICAgIGFlcyh4ID0gRXhwcmVzc2luZ19IQSwKICAgICAgICAgICAgICAgICB5ID0gUmVhc3NvcnRtZW50KSwKICAgICAgICAgICAgIGNvbG9yID0gInNreWJsdWUiLAogICAgICAgICAgICAgc2l6ZSA9IDIuNSkgKwoKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiMSIgPSAiIzRFN0E5NyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIiNGMjhFMkIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiA9ICIjNTlBMTRGIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiIzk2NEIwMCIpKSArCgogIGFubm90YXRlKCJ0ZXh0Iix4ID0gNzUsIHkgPSAxNSxzaXplID0gNixsYWJlbCA9IFRlWCgiXFx0ZXh0YmZ7JFxcUF9QJCA9IDF9IikpICsKICBsYWJzKHg9ZXhwcmVzc2lvbihib2xkKCIlIGNlbGxzIEhBIl4iKyIpKSwKICAgICAgIHk9IiUgcmVhc3NvcnRtZW50IiwKICAgICAgIGNvbG9yPSJSZXAiKSArCiAgZ3VpZGVzKGNvbG9yID0gRkFMU0UpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzPWMoMCwxMDApKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cz1jKDAsMTAwKSkgCgpnZ3NhdmUoZmlsZSA9ICJQbG90cy83Ql9QcmVkaWN0ZWRfR0ZISzk5X1JlYXNzb3J0bWVudC5wZGYiLAogICAgICAgZHBpID0gMzAwLAogICAgICAgd2lkdGggPSA1LAogICAgICAgaGVpZ2h0ID0gNSwKICAgICAgIHVuaXQgPSAiaW4iKQoKYGBgCgo=